0

我遇到过很多这样的问题,但大多数建议的解决方案都是使缓存无效/重新启动或升级到最新版本。这些解决方案甚至不适用于每种情况(包括我的)。在大多数问题中,OP 声明这不起作用,而其他人报告他们可以毫无问题地做到这一点。我似乎很清楚,这高度依赖于每个人的配置/设置,并且必须准备好某些东西才能使此功能正常工作。

显然它对我不起作用,但与其发布关于如何解决我的特定情况的问题,我认为最好了解 PhpStorm 如何确定函数定义的用法。希望结果将是一个故障排除步骤列表,以检查此功能是否不适用于“验证缓存/重新启动”和升级到最新版本的人。

我觉得在不知道此功能如何找到用途的情况下,我们只能通过反复试验来了解它的工作原理。如果我们知道 A 和 B 必须为真才能使此功能起作用,那么我们可以系统地确保 A 和 B 实际上是真的。

为了清楚起见,问题是这样的。我有一个方法类ClassA::Method1()。我组成ClassA其他类,ClassB并且ClassC- 每个类都使用ClassA::Method1(). 我正在尝试转到中的方法定义ClassAMethod1右键单击它,选择“查找用法”并期望它向我报告在类ClassBClassC(或任何其他碰巧使用它的)中的每次使用。

PhpStorm 如何确定用途?它是基于注释的吗?命名空间?两者的结合?还是完全不同的东西?

4

1 回答 1

1

我可能已经通过反复试验弄清楚了这一点。它似乎遵循命名空间/类型提示和 PSR-4 标准。但是,如果您正在对接口进行编程,PhpStorm 似乎没有能力找到具体类方法的用法。特别是当具体类扩展抽象类并实现扩展抽象类实现的接口的接口时。我已经制定了一个要点(带有评论)来说明这一点。

https://gist.github.com/dlanz/484c1584b5cbe054b9402bde56afae81

简而言之,如果您要对接口进行编程,则必须在接口上使用“查找用法”。如果一个接口扩展了另一个接口,并且您只想找到扩展接口的用法,但对于它继承的方法 - 您要么不走运,要么必须在扩展接口中重新定义接口方法。或者你永远不能扩展接口,但有时这样做是有意义的。

于 2017-05-18T20:33:01.693 回答