类存在多个定义

Max*_*kyi 59 phpstorm

我正在使用Kohana框架,它允许多个类定义(在应用程序和系统子文件夹中).我正在使用phpstorm作为一个给我消息的IDE multiple definitions exist for class.有没有办法告诉phpStorm哪个类定义是正确的?

Laz*_*One 85

有没有办法告诉PhpStorm哪个类定义是正确的?

不幸的是,你不能.

https://youtrack.jetbrains.com/issue/WI-17646 - 观看此门票(星级/投票/评论)以获得有关任何进展的通知.

ATM你或者只是忽略了挥手......或者你可以配置检查以不报告这种情况(Settings/Preferences | Editor | Inspections | Undefined | Undefined class | Don't report multiple class declaration potential problems).

即使配置了这种检查,IDE仍会询问您要跳转到哪个类声明(这是正确的行为,因为IDE不知道您是否希望查看原始实现或实现自己的实现).


唯一的另一种方法 - 确保项目中只有一个具有相同名称的类:

  • 将整个文件夹标记为已排除
  • 将单个文件标记为纯文本

两者都可以通过项目视图中的内容菜单获得,并且仅适用于项目文件(例如,如果尝试应用于库范围,将无法使用或无效).

  • 对于PhpStorm 2018,选项位于```Settings | 编辑| 检查| PHP | 未定义| 未定义的类| 不报告多个类声明潜在问题``` (6认同)
  • @Meglio是的-这就是IDE的行为-如果多个具有相同名称的类的行为很奇怪。最好的-从项目中排除重复项-整个文件夹(标记为已排除)或单个文件(标记为纯文本)。我想https://youtrack.jetbrains.com/issue/WI-17646将是观看之后的正确门票... (2认同)
  • PhpStorm 2022 - `设置 | 编辑| 检查 | PHP | 未定义的符号 | 多个类声明` (2认同)

kub*_*uba 26

您应该忽略完整的缓存文件夹.

  • 转到设置>目录
  • 选择 var\cache
  • 将其设置为"排除"

来自:https://github.com/Haehnchen/idea-php-symfony2-plugin/issues/301


Max*_*kyi 20

我找到了解决问题的可能方法 - 我可以 mark file as plain

  • 这甚至都不是解决方案.你怎么期望代码完成或提示等.如果你真的不需要这个,停止使用IDE ...开始使用记事本. (5认同)
  • 并不总是适用,但为我工作;)谢谢! (2认同)
  • 这是一个解决方案,但到目前为止是最糟糕的解决方案.库巴的建议有效. (2认同)

Mau*_*Lee 12

作为变体,您可以仅针对特定班级关闭检查.将光标underwaved类的名称里面,然后Alt+Enter→交通Inspection options→交通Supress for statement

PHPStorm补充道

/** @noinspection PhpUndefinedClassInspection */
Run Code Online (Sandbox Code Playgroud)

上面的类声明和类名不再是underwaved.

  • 感谢您的解决方案 (2认同)

Jam*_*ond 8

对安迪·怀特的评论进行一些补充:

设置 | 编辑| 检查 | PHP | 未定义 | 未定义类 | 不要报告多个类声明的潜在问题

我真的找不到这个配置,以为现在不存在了,但它仍然存在,但隐藏得很好)

这有点违反直觉且不显眼,但所需的复选框位于右侧面板中,并且仅在单击该Undefined class行时才会出现: 在此输入图像描述


小智 7

我到处都是网络,并没有一个选项对我有用...我已经苦苦挣扎了几个月,今天我找到了一个解决方案,所以如果以上都不适合你,请尝试重新定义PHP包括路径列表.在"设置">"语言和框架">"PHP"下,确保仅配置包含项目或应用程序使用的源路径的文件夹.

我的场景是我做了很多软件包开发,虽然我的软件包都在一个项目中,但是在我的作曲家配置中它们也在"vendor"中"符号链接",因此PHPStorm在供应商文件夹中找到了重复的代码.和我的包文件夹.同样,如果包含路径重复,或者路径配置为查找项目之外的代码(已经是项目的一部分),它也会找到多个定义.因此,排除供应商中的符号链接文件夹,允许PHPStorm仅查找源的一个副本到我的包,如果我的包包含他们自己的供应商文件夹,它们也将显示为重复的定义.删除包含路径列表中可能找到应用程序的任何内容

  • 这对我很有帮助,事实证明我的“www”项目通过“whatever/myproject/api/src”和“vendor/myproject/api”引用了我的“api”项目,这导致大多数类获得“多个定义”存在 for class" 警告,无论任何 `use ...` 语句如何。让我抓狂的是,直到我仔细查看“设置 -> 语言和框架 -> PHP”中列出的路径。删除第一个并将第二个编辑到“vendor/myproject/api/src”似乎已经成功了。 (2认同)

Dwz*_*wza 5

序言

猜想有几种方法可以解决这个问题。实际上,这只是一个警告,它说 phpstorm 无法为您提供自动完成功能,因此您必须更加努力:D

我在这里遇到了与许多其他人相同的问题,并通过忽略不需要的来解决它。


设想

在 composer 安装后有一个带有供应商文件夹的 git 项目。此外,my-project.phar这个项目中有一个也包含一些供应商的东西,这引起了我的警告。


解决方案

File > Preferences|Settings > Directories 在那里您必须排除文件和文件夹。就我而言,.phar它是一个“文件”,您可以将其添加到设置窗口的底部。

样本

PHPStorm 将不再看到重复项。

这是非常特定于项目的,我想大多数人必须找到自己的解决方案,但指出这一点可能有助于更轻松地找到问题。

希望这对某人有所帮助:)

  • 这是显而易见的,但这有帮助!谢谢 (2认同)