我在PhpStorm IDE上有一个命名空间通知,我不知道如何解决它。
IDE
- PhpStorm 2023.1
结构
我在其他供应商的各种其他类中有一个类,我的类位于此文件夹中:
/home/classes/vendor/namespace外部/namespace内部/subnamespace
php文件位于/home/classes/
中
我的类文件就在上面的文件夹里,是ClassFile.php
。其中,namespace
如下所示:
<?php
Namespace namespaceOuter\namespaceInner\subnamespace\ClassFile;
use \exception;
use \PDOexception;
class ClassFile {
...
}
问题
PhpStorm IDE告诉我:
命名空间名称与PSR-0/PSR-4项目结构不匹配
没问题
- 自动装弹机工作得很好。
- 这个班级及其孩子和同龄人都在现场网站上完美地工作,这个问题似乎纯粹是IDE告诉我我们没有遵循PSR-0/PSR-4。
- 这些是我们自己的类,不是由Composer设置的,也不涉及Composer(其他类是这样做的)。
尝试解决方案
- 我尝试更改命名空间,使其在Class文件中从root(
\namespaceOuter\namespaceInner\subnamespace\ClassFile;
)调用,但这并没有删除通知。 - 我尝试使用IDE建议的修复方法,实际上它在当前类的文件夹(
/home/classes/vendor/namespaceOuter/namespaceInner/subnamespace/namespaceOuter/namespaceInner/subnamespace/ClassFile.php
)中创建了一堆新的子文件夹,这显然是不切实际和错误的。 vendor/
文件夹中的其他已建立类(如PHPMailer)在其类文件上没有相同的通知。
阅读
我读过PHP Namespacing documentation以及PSR-4 documentation,其中包括这个例子:
| 完全限定类名|命名空间前缀|基本目录|生成的文件路径|
| --------------|--------------|--------------|--------------|
| \Symfony\Core\请求|Symfony\Core|./vendor/Symfony/Core/| ./vendor/Symfony/Core/Request.php |
虽然这不是Symfony项目,但限定名称空间和文件路径之间的不一致意味着这不是问题。
| 完全限定类名|命名空间前缀|基本目录|生成的文件路径|
| --------------|--------------|--------------|--------------|
| \namespaceOuter\namespaceInner\subnamespace\ClassFile.php |namespaceOuter\namespaceInner\subnamespace|类别/供应商/|????|
问题
这个命名空间是否不正确,或者PHPStorm IDE建议有问题(我相信是这样)-如果是这样,我如何检查/更新/确认/修复它?
谢谢
1条答案
按热度按时间rjee0c151#
在花了很长时间写出这个问题后,我发现答案是:
在PhpStorm --〉Settings --〉Directories中,
/home/classes/vendor/namespaceOuter/namespaceInner/subnamespace
目录被标记为“Resource Root”。通过将其替换为/home/classes/
作为资源根(Documentation),通知神奇地消失了。因此,这个问题似乎是IDE问题,而不是命名空间问题。
编辑:
项目根目录是
/home/
。$_SERVER['DOCUMENT_ROOT']
是/home/public_html
。classes/
文件夹现在是“Resources Root”,/home/
文件夹是PhpStorm项目的“Content Root”。这是因为(我认为)自动加载器位于
classes/
文件夹中,所以PhpStorm的“资源根”应该与PHP自动加载器位于同一个文件夹中,这样PhpStorm就可以找到所有自动加载的类