我正在使用Kohana框架,该框架允许多个类定义(在应用程序和系统子文件夹中)。我正在使用phpstorm作为IDE,它向我发送消息multiple definitions exist for class
。有什么办法告诉phpStorm哪个类定义正确?
我正在使用Kohana框架,该框架允许多个类定义(在应用程序和系统子文件夹中)。我正在使用phpstorm作为IDE,它向我发送消息multiple definitions exist for class
。有什么办法告诉phpStorm哪个类定义正确?
Answers:
有什么办法告诉PhpStorm哪个类定义正确?
不幸的是,您不能。
https://youtrack.jetbrains.com/issue/WI-17646-观看这张票(star / vote / comment)以获得任何进展的通知。
您可以忽略自动柜员机,也可以将检查配置为不报告此类情况(Settings/Preferences | Editor | Inspections | PHP | Undefined | Undefined class
带有Don't report multiple class declaration potential problems
复选框)。
即使配置了该检查,IDE仍然会询问您要跳转到的类声明(这是正确的行为,因为IDE不知道您是要查看原始实现还是自己实现)。
唯一的其他方法是确保项目中只有一个同名类。为此,您可以使用:
两者都可以通过“项目视图”中的内容菜单使用,并且仅适用于项目文件(例如,将不可用,或者如果尝试在“库”范围中应用,则无用)。
Settings | Editor | Inspections | PHP | Undefined | Undefined class | Don't report multiple class declaration potential problems
您应该只忽略完整的缓存文件夹。
var\cache
来自:https : //github.com/Haehnchen/idea-php-symfony2-plugin/issues/301
p1
和p2
。p2
可从符号链接projects/p2
或projects/p1/vendors/xavi-montero/p2
通过符号链接访问。在p1
自动完成中编辑某些类(例如Symfony Controller)时,该方法不起作用。原因:两家都安装了供应商,因此发生冲突。我只是排除在外projects/p1/vendor/xavi-montero/p2/vendor
。现在,我可以从p2
编辑时自动完成我自己的类,p1
但是由于“第二”个供应商被忽略而“第一”不被排除,因此冲突消失了。
packages/*
到public/app/plugins/*
文件夹,则此解决方案非常有效。
我找到了解决问题的可能方法-我可以 mark file as plain
作为变体,您只能针对特定类别关闭检查。underwaved类名里面把光标,然后Alt+Enter
→交通Inspection options
→交通Supress for statement
PHPStorm添加
/** @noinspection PhpUndefinedClassInspection */
上面的类声明和类名称不再被削弱。
我到处都是网络,没有一个选项对我有用。。。我已经努力了几个月,今天我找到了一个解决方案,因此,如果以上都不适合您,请尝试重新定义PHP包括路径列表。在“设置”>“语言和框架”>“ PHP”下,确保仅配置了包含项目或应用程序使用的源路径的文件夹。
我的情况是我进行了很多软件包开发,尽管我的软件包都在一个项目中,但它们在我的作曲家配置中的“供应商”中也被“符号链接”,因此,PHPStorm在供应商文件夹中找到了重复的代码。和我的包裹文件夹。同样,如果包含路径被复制,或者配置了路径以在您的项目外部(已属于项目的一部分)中查找代码,则它还将查找多个定义。因此,排除供应商中的符号链接文件夹,PHPStorm只能为我的软件包找到源的一个副本,并且如果我的软件包包含自己的供应商文件夹,它们还将显示为重复的定义。删除“包含路径”列表中可能会出现重复的所有内容
www
项目api
同时通过whatever/myproject/api/src
和引用了我的项目vendor/myproject/api
,这导致大多数类都获得“存在类的多个定义”警告,而不管任何use ...
声明如何。让我发疯,直到我仔细观察列出的路径Settings -> Languages and Frameworks -> PHP
。删除第一个,然后编辑第二个vendor/myproject/api/src
似乎可以解决问题。
phpunit
源,因此PHPStorm选择了两个源。我可以通过进入Languages&Frameworks> PHP并仅指定两个PHPUnit文件夹之一作为源来修复它。
我不知道您是如何创建其他定义的,但是如果您或任何人由于致电而遇到此问题 class_alias()
,那么您可以快速解决此问题。
考虑
class_alias(
'The\AliasClass',
'My\RealClass',
true
);
和
class_alias(
'The\AliasClass',
'My\Real'.'Class', // <-- break up the string
true
);
有了后者,PhpStorm将不会接听,My\RealClass
并且您的“多重定义”警告将停止。顺便说一下,这是一个古老的JavaScript技巧,可以将HTML嵌入字符串文字中。
这个警告使我很烦了。我相信这里的答案是正确的。我收到警告的原因是由于自动完成文件为phpStorm提供了有关如何查找codeIgniter函数的提示。如果您也这样做,这就是某些警告的原因。自动完成文件使phpStorm认为有两个不同的定义。但是,我比自动警告更喜欢自动完成功能,因此我想我必须忍受它们。
这是我指的自动完成功能: IntelliJ IDEA 12未找到CodeIgniter类,引发错误
至少在PHPStorm可以使用更加集中的配置之前(例如“替代类”),目前的方式是将这些通知(并且只有那些)标记为可忽略:
/* @noinspection PhpUndefinedClassInspection */
/**
* Verify an existing contract. Requires agent and supervisor.
*
* @param array $data
* @param Cliente $cli
* @param User $age
* @param User $sup
* @return Contratto
*/
private function contratto(
array $data,
/* @noinspection PhpUndefinedClassInspection */
Cliente $cli,
/* @noinspection PhpUndefinedClassInspection */
User $age,
/* @noinspection PhpUndefinedClassInspection */
User $sup
) {
请注意,要禁用PHPDoc注释中的通知,我必须在注释之前添加一条指令。这并没有禁用三个参数的通知。
将来,我希望能够在PHPStorm中将其指定为
* @param array $data raw data for the contract
* @param \local\foobar\Cliente $cli customer opening the contract
private function contratto(
array $data,
/*\local\foobar\*/Cliente $cli,
或更妙的是,显式使用新的PHPdoc标记,例如“ @replaces”。因此,PHPStorm会知道我的课程是未被取代的课程。我也要装饰我的use
的,以指定我将实际使用的类。
并在我的整个代码中搜索“ @noinspection PhpUndefinedClassInspection”。
上述问题源于以下事实:我有一个“主”客户类,该类被foobar的“本地”修改所覆盖客户端客户的客户具有(例如)一种特殊方法。
执行此操作的“正确”方法应该是声明一个FoobarCustomer,它仅由foobar的代码使用,并且是Customer的子类。当然,只有当子类在我的代码中而不是在框架的代码中时,这才可能实现,而且我可能需要父类中的某些方法protected
而不是private
,这可能使此解决方案变得不可能或需要反射:
/**
* Verify an existing contract. Requires agent and supervisor.
*
* @param array $data
* @param FoobarCliente $cli
* @param FoobarUser $age
* @param FoobarUser $sup
* @return Contratto
*/
private function contratto(array $data, FoobarCliente $cli, FoobarUser $age...
猜猜有几种方法可以解决此问题。实际上,这只是一个警告,它说phpstorm无法为您提供自动补全功能,因此您必须加倍努力:D
我和这里的许多其他人一样有同样的问题,并通过忽略不想要的问题来解决了。
安装Composer之后,有一个带有供应商文件夹的git项目。另外,my-project.phar
该项目中还有个还包含一些供应商的东西,这引起了我的警告。
File > Preferences|Settings > Directories
在那里您必须排除文件和文件夹。就我而言,.phar
它是一个“文件”,您可以将其添加到设置窗口的底部。
PHPStorm将不再看到重复项。
这是非常特定于项目的,我想大多数人都必须找到自己的解决方案,但是指出这一点可能有助于更轻松地发现问题。
希望这可以帮助某人:)