代码之家  ›  专栏  ›  技术社区  ›  Martin Miguel Stevens

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

  •  0
  • Martin Miguel Stevens  · 技术社区  · 3 年前

    我在PhpStorm IDE上有一个命名空间通知,我看不出如何解决它。

    集成电路设备

    • 2023.1年暴风雪

    结构

    在其他供应商的各种其他类中,我有一个类,我的类位于这个文件夹中:

    /主页/类/供应商/命名空间外层/命名空间内层/子命名空间

    autoloader.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(其他类会这样做)。

    尝试的解决方案

    • 我已尝试更改命名空间,使其从root调用( \namespaceOuter\namespaceInner\subnamespace\ClassFile; )在Class文件中,但这不会删除通知。

    • 我尝试使用IDE建议的修复程序,该程序实际上在当前类的文件夹中创建了一堆新的子文件夹( /home/classes/vendor/namespaceOuter/namespaceInner/subnamespace/namespaceOuter/namespaceInner/subnamespace/ClassFile.php )这显然是不切实际和错误的。

    • 其他已建立的类(如PHPMailer) vendor/ 文件夹的类文件上没有相同的通知。

    阅读

    我读过PHP Namespacing documentation 以及 PSR-4 documentation 其中包括该示例:

    完全合格的类名 命名空间前缀 基本目录 生成文件路径
    \Symfony \核心\请求 Symfony \核心 ./供应商/Symfony/Core/ ./vider/Symfony/Core/Request.php

    虽然这个 不是 在Symfony项目中,限定名称空间和文件路径之间的不一致意味着这不是问题。

    完全合格的类名 命名空间前缀 基本目录 生成文件路径
    \命名空间外部\命名空间内部\子命名空间\ClassFile.php 命名空间外部\命名空间内部\子命名空间 类别/供应商/ ???

    提问

    这个命名空间是否有误,或者PHPStorm IDE建议是否存在问题(我相信是这样)——如果是这样,我该如何检查/更新/确认/修复?

    谢谢

    1 回复  |  直到 3 年前
        1
  •  3
  •   Martin Miguel Stevens    3 年前

    在花了很长时间写下这个问题后,我发现答案是:

    在暴风雨中---->设置-->目录 /home/classes/vendor/namespaceOuter/namespaceInner/subnamespace 目录被标记为“资源根”。将其替换为 /home/classes/ 作为资源根( Documentation )通知神奇地消失了。

    因此,这个问题似乎是IDE问题,而不是命名空间问题。

    编辑:

    项目根是 /home/ .
    这个 $_SERVER['DOCUMENT_ROOT'] 是 /home/public_html .
    这个 classes/ 文件夹现在是“资源根” /家/ 文件夹是PhpStorm项目的“内容根”。

    这是有效的,因为(我认为)自动加载器位于 班级/ 文件夹,因此PhpStorm“Resources Root”应该与PHP Autoloader所在的文件夹相同,这样PhpStorm就可以找到所有自动加载的类

    推荐文章