代码之家  ›  专栏  ›  技术社区  ›  FreeLightman

如何解决类的PHPStorm警报“多个定义”

  •  4
  • FreeLightman  · 技术社区  · 6 年前

    我使用PHPStorm,并为 PHPUnit\Framework\TestCase 。我不太确定,但它看起来像是PHPStorm用来组成自动加载系统。所以我试图找到不必要的类定义所在的目录,并将其排除在外。

    我发现我可以使用 exclude-from-classmap 中的属性 autoload 。因此,我添加了以下内容:

    "vendor/cloudinary/cloudinary_php/tests/",
    "vendor/bin/.phpunit/phpunit-5.7/src/ForwardCompatibility/"
    

    这些目录中存在不必要的类定义。然后我跑了 composer dump-autoload 。没有任何变化。重新启动PHPStrom-无。

    这是我的整个自动加载部分:

    "autoload": {
            "psr-4": { "": "src/" },
            "classmap": [ "app/AppKernel.php", "app/AppCache.php" ],
            "files": [
                "src/helpers/helpers.php"
            ],
            "exclude-from-classmap": [
                "vendor/cloudinary/cloudinary_php/tests/",
                "vendor/bin/.phpunit/phpunit-5.7/src/ForwardCompatibility/"
            ]
        },
    

    我注意到相关问题,但它们不符合我的要求。我知道从composer中排除文件夹的方法。

    2 回复  |  直到 6 年前
        1
  •  8
  •   axiac    6 年前

    PhpStorm不太关心您的 composer.json * 。它会在项目的文件中找到两次定义的类,这就是它警告您的原因。

    PHP并不担心这个类被定义了两次。如果它从一个文件(通过Composer生成的自动加载程序)加载类,则它不会读取另一个文件。

    检测到重复项并决定希望PhpStorm忽略哪一个后,在项目视图中右键单击其目录并选择“将目录标记为”->从显示的菜单中选择“已排除”。


    * 这并不完全正确。默认情况下,PhpStorm配置为将其在项目的Composer文件中找到的包作为库添加。但它警告说,即使项目中没有Composer文件,类的定义也会重复。

        2
  •  2
  •   Szczepan Hołyszewski    4 年前

    您正在使用多个模块,即单个“工作区”中的多个“项目”,对吗?

    PHPStorm并不真正支持这一点。它 让我们 在一个工作区中打开多个项目,但实际上 支持 那种工作风格。该支持完全被破坏,支离破碎,无论它存在什么,似乎都是在一个根本不兼容的设计之上被入侵的。这只是一种持续到 2019 2020年,隧道尽头没有灯光。