php 这个命名空间问题是我的问题还是IDE的问题?

efzxgjgh  于 2023-05-05  发布在  PHP
关注(0)|答案(1)|浏览(136)

我在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建议有问题(我相信是这样)-如果是这样,我如何检查/更新/确认/修复它?
谢谢

rjee0c15

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就可以找到所有自动加载的类

相关问题