如何解决 class 的 PHPStorm 警报 "Multiple definitions"

How to resolve PHPStorm alert "Multiple definitions" for a class

我使用 PHPStorm,PHPUnit\Framework\TestCase 收到以下消息 "Multiple definitions"。我不太确定,但看起来 PHPStorm 使用了 compose 自动加载系统。所以我试图找到不必要的 class 定义存在的目录并排除它们。

我发现我可以在autoload中使用exclude-from-classmap属性。所以我添加了以下内容:

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

这些目录中存在不必要的 class 定义。那我运行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 中排除文件夹的方法。

PhpStorm 不太关心你的composer.json*。它发现 class 在您的项目文件中定义了两次,这就是它警告您的原因。

PHP 不关心 class 被定义两次。如果它从一个文件加载 class(通过 Composer 生成的自动加载器),它永远不会读取另一个文件。

在检测到重复项并决定要 PhpStorm 忽略哪个后,在项目视图中的目录中 right-click 并从出现的菜单中选择 "Mark Directory as" -> "Excluded" .


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

您正在使用多个模块,即单个 "workspace" 中的多个 "projects" 对吗?

PHPStorm 并不真正支持这一点。它您可以在一个工作区中打开多个项目,但并不真正支持那种工作方式。支持彻底崩溃,支离破碎,无论存在什么,似乎都是在一个根本不兼容的设计之上被黑客入侵的。这只是延续到20192020年的悲惨状况,隧道尽头没有光明。