我看过这个 question , 但不幸的是没有答案。
我正在使用 PhpStorm 并且正在构建一个加载了 Composer 项目的项目。我正在努力做到这一点,以便 PhpStorm 在我按住 Ctrl 并单击它们时识别我的类/函数,特别是对于通过 composer 安装的项目。
我已尝试更改 Settings
/Directories
中的 Source Folders
,但我仍然无法正常工作。
我正在使用
需要 __DIR__ 。 '/vendor/autoload.php';
加载我的 Composer 依赖项。
我需要做什么才能让 PhpStorm 从通过 composer 加载的文件中识别我的声明?
为了支持我的问题,这里有一些图片:
我的 test.php 文件:(注意它如何无法识别我的类):
项目/test.php
通过 composer 添加并使用 autoloader 安装的项目:
project/vendor/braintree/braintree_php/lib/Braintree/Subscription.php
最佳答案
嗯...从技术上讲,该包没有定义Braintree_Subscription
类(我的意思是——“正确的”定义)。您的第二张屏幕截图显示了 \Braintree
命名空间中 Subscription
类的定义。
这是该文件:https://github.com/braintree/braintree_php/blob/master/lib/Braintree/Subscription.php
注意最后一行——在调用 class_alias()
函数时提到了“undefined”类:
class_alias('Braintree\Subscription', 'Braintree_Subscription');
看起来你的 PhpStorm 不理解这样的类定义。
这是来自 PhpStorm 的问题跟踪器的票证:WI-11936 -- 根据机票,它已于 2016 年 11 月 3 日(基本上是 2 天前)确定。修复(类别名支持)将在下一个主要版本中可用,即 2016.3。
您可以等到它正式发布(大约月底)或尝试下一个 EAP 或 RC 构建(查看他们的 blog 或 Twitter 以获取公告)。
现在(对于当前和过去的稳定版本:2016.2 及更早版本)解决方案是使用“真实”类名 (\Braintree\Subscription
) 而不是别名 (Braintree_Subscription
) 在你的代码中。
但无论如何:在您自己的新代号中使用真正的类是最正确的方法——为需要某些遗留/兼容性支持的情况和其他边缘情况保留类别名。
附言 这与 Composer 无关——完全没有关系。
这只是代码示例——无论出于何种原因(可能 遗留/兼容性原因......或者对于 PHP 新用户来说更容易,不知道)他们使用类别名而不是真正的类名并且 PhpStorm 不理解这样的别名。
关于PhpStorm 不识别类别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40441937/