【问题标题】:PhpStorm does not recognise class aliasesPhpStorm 无法识别类别名
【发布时间】:2016-11-05 18:50:06
【问题描述】:

我看过这个question,但很遗憾没有答案。

我正在使用 PhpStorm,并且正在构建一个加载了 composer 项目的项目。我正在尝试让 PhpStorm 在我 ctrl+单击它们时识别我的类/函数,特别是对于通过 composer 安装的项目。

我已尝试更改 Settings/Directories 中的 Source Folders,但我仍然无法使其正常工作。

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

我需要做什么才能让 PhpStorm 从通过 composer 加载的文件中识别我的声明?


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

我的 test.php 文件:(注意它无法识别我的班级): project/test.php

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

我的 composer.json 文件:project/composer.json

【问题讨论】:

    标签: php phpstorm braintree


    【解决方案1】:

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

    这是那个文件:https://github.com/braintree/braintree_php/blob/master/lib/Braintree/Subscription.php

    注意最后一行——在调用class_alias() 函数时提到了“未定义”类:

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

    您的 PhpStorm 似乎不理解此类定义。


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

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


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

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


    附言 这与 Composer 无关——完全没有关系。

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

    【讨论】:

    • 绝对是旧版,如果您检查github.com/braintree/braintree_php/blob/…,您会看到该文件在 v2.2 中具有旧版文件名。 v3 的正确用法通常是使用新的类名
    • 感谢@JimL 的澄清。 PHP 中的命名空间自 v5.3 (IIRC) 起可用,该软件包的 2.x 版本支持 5.2 和 5.3。所以对于当前的 v3(需要 5.4 PHP)我认为他们应该更新他们的文档以使用当前/真实的类名 ...
    • 是的,你完全正确@LazyOne,它与作曲家无关。我真的不知道问题出在哪里,所以我试图解决它。因为我并没有真正使用作曲家,所以我只是认为这就是问题所在。期待看到 Phpstorm 支持class_alias!非常感谢你解决这个问题
    猜你喜欢
    • 2019-01-16
    • 2020-10-19
    • 1970-01-01
    • 2016-09-02
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多