未定义 class 如果 class 在不同的命名空间中

Undefined class if class is in different namespace

我在 phpstorm 8.0.3 上设置了一个 yii2 项目。我的命名空间结构如下:

backend\
  controllers
  models
  ...
frontend\
  controllers
  models
  ..
common\
  controllers
  models

我在项目中使用了 composer,并在 vendor 文件夹中安装了各种依赖项。

每当我尝试使用不在同一基本命名空间(frontendbackendcommon)中的 class 时,我都会得到一个未定义的 class 错误。奇怪的是 class 的命名空间是自动完成的:

另一个奇怪的是,如果打开具有已定义 class 的文件,未定义 class 错误会消失一些 classes。

您必须在 use 节内声明 class 或命名空间。例如,如果您需要使用 custom\controllers 命名空间中的 BaseController

<?php
namespace frontend\components;

// Add this line
use common\controllers\BaseController;

class Controller extends BaseController {
}

我认为您在使用 composer autoload 时遇到了一些问题。 尝试:

composer update

PHPStorm 缓存似乎已损坏。我最终通过 File -> Invalidate Caches/Restart 使缓存无效。这删除了我的历史记录,但修复了未定义的 class 问题。

由于我的 PHP 语言设置,我遇到了这种情况。我通过删除我的 类 之一中的命名空间发现了这一点。错误更改为 "Scalar types are only available in PHP 7".

前往 File -> Settings -> Language & Frameworks -> PHP。将 PHP language level 更改为语言版本 7 或更高版本。

编辑: 这样做之后,Insert -> Getters and Setters 间歇性地生成函数和注释作为 mixed 而不是 string。我不知道为什么会这样,但我手动重新创建了所有字段并解决了问题。

我不得不重置我的 PHPstorm 以解决“Class 未找到”的问题。

File > Manage IDE Settings > Restore Default Settings...

请小心,它可以解决所有问题,但它还可以让您备份当前设置。在那之后,一切都被硬重置了,现在又可以工作了。

有时会有帮助。

设置 -> 目录

从“已排除”中删除文件夹