PhpStorm不识别类别名

时间:2016-11-05 18:50:06

标签: php phpstorm braintree

我已经看过这个question,但不幸的是没有答案。

我正在使用PhpStorm,我正在构建一个加载了作曲家项目的项目。我正在努力让PhpStorm在我按住ctrl +点击它们时识别我的类/功能,特别是对于通过composer安装的项目。

我尝试更改Source Folders / Settings中的Directories,但我仍然无法使用此功能。

我正在使用 require __DIR__ . '/vendor/autoload.php';加载我的作曲家依赖。

我需要做些什么才能让PhpStorm通过编辑器加载的文件识别我的声明?

为了支持我的问题,这里有一些图片:

我的test.php文件:(注意它无法识别我的课程): project/test.php enter image description here

通过composer添加并使用自动加载器安装的项目: project/vendor/braintree/braintree_php/lib/Braintree/Subscription.php enter image description here

我的composer.json文件:project/composer.json enter image description here

1 个答案:

答案 0 :(得分:3)

嗯......从技术上讲,这个包没有定义Braintree_Subscription类(我的意思是 - "正确"定义)。您的第二个屏幕截图显示了Subscription命名空间中\Braintree类的定义。

以下是该文件:https://github.com/braintree/braintree_php/blob/master/lib/Braintree/Subscription.php

注意最后一行 - " undefined"调用class_alias()函数时会提到class:

class_alias('Braintree\Subscription', 'Braintree_Subscription');

看起来你的PhpStorm不理解这样的类定义。

以下是来自PhpStorm的问题跟踪器的票证:WI-11936 - 相应于2016年11月3日(2天前,基本上)已修复的票证。修复程序(类别名支持)将在下一个主要版本中提供,即 2016.3

您可以等到它正式发布(大约在月末)或尝试下一步 EAP或RC版本(观看他们的blog或推特发布公告)。

现在(对于当前和过去的稳定版本:2016.2及更早版本),解决方案是使用" real"您的代码中的类名(\Braintree\Subscription)而不是别名(Braintree_Subscription)。

但无论如何:在您自己的新代码名称中使用真实类是最正确的方法 - 在需要一些遗留/兼容性支持和其他边缘情况的情况下保留类别名。

<强> P.S。 这与Composer无关 - 什么都没有。

它只是代码示例 - 无论出于何种原因(可能遗留/兼容性原因......或者对PHP用户来说更容易,不知道)他们正在使用类别名代替真正的类名和PhpStorm不理解这些别名。