未定义 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 文件夹中安装了各种依赖项。
每当我尝试使用不在同一基本命名空间(frontend
、backend
或 common
)中的 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...
请小心,它可以解决所有问题,但它还可以让您备份当前设置。在那之后,一切都被硬重置了,现在又可以工作了。
有时会有帮助。
设置 -> 目录
从“已排除”中删除文件夹
我在 phpstorm 8.0.3 上设置了一个 yii2 项目。我的命名空间结构如下:
backend\
controllers
models
...
frontend\
controllers
models
..
common\
controllers
models
我在项目中使用了 composer,并在 vendor 文件夹中安装了各种依赖项。
每当我尝试使用不在同一基本命名空间(frontend
、backend
或 common
)中的 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...
请小心,它可以解决所有问题,但它还可以让您备份当前设置。在那之后,一切都被硬重置了,现在又可以工作了。
有时会有帮助。
设置 -> 目录
从“已排除”中删除文件夹