PhpStorm 如何找到函数定义的用法?
How does PhpStorm find usages of function definitions?
我遇到过很多这样的问题,但大多数建议的解决方案都是让 caches/restart 失效或升级到最新版本。这些解决方案甚至并非适用于所有情况(包括我的)。在大多数问题中,OP 表示这是行不通的,而其他人报告说他们可以毫无问题地做到这一点。在我看来,这在很大程度上取决于每个人的 configuration/setup 并且某些事情必须到位才能使此功能正常工作。
显然它对我不起作用,但与其 post 关于如何解决我的特定情况的问题,我认为最好了解 PhpStorm 如何确定函数定义的用法。希望结果将是一个故障排除步骤列表,如果此功能不适用于 "Validate Caches/Restart" 以外的人并升级到最新版本,则可以检查该列表。
我觉得在不知道此功能如何找到用法的情况下,我们只能通过反复试验来了解它的工作原理。如果我们知道 A 和 B 必须为真才能使此功能起作用,那么我们就可以系统地确保 A 和 B 实际上为真。
为清楚起见,问题是这样的。我有一个 class 和一个方法 ClassA::Method1()
。我将 ClassA
组合成其他 classes,ClassB
和 ClassC
- 每个都使用 ClassA::Method1()
。我正在尝试转到 Method1
的 ClassA
中的方法定义,右键单击它,选择 "Find Usages" 并期望它在 classes ClassB
和 ClassC
(或任何其他碰巧使用它的人)。
PhpStorm 如何确定用法?它基于注释吗?命名空间?两者的结合?还是完全不同?
我可能是通过反复试验弄明白了这一点。它似乎遵循 namespaces/type 提示和 PSR-4 标准。但是,如果您正在为接口编程,PhpStorm 似乎无法找到具体 class 方法的用法。特别是当具体 class 扩展抽象 class 并实现一个扩展接口的接口时,抽象 class 实现。我开发了一个要点(带有注释)来说明这一点。
https://gist.github.com/dlanz/484c1584b5cbe054b9402bde56afae81
简而言之,如果您要针对接口进行编程,则必须在接口上使用 "Find Usages"。如果一个接口扩展了另一个接口,并且您只想查找扩展接口的用法,但要查找它继承的方法——您要么运气不好,要么必须在扩展接口中重新定义接口方法。或者你永远不能扩展接口,但有时它是有意义的。
我遇到过很多这样的问题,但大多数建议的解决方案都是让 caches/restart 失效或升级到最新版本。这些解决方案甚至并非适用于所有情况(包括我的)。在大多数问题中,OP 表示这是行不通的,而其他人报告说他们可以毫无问题地做到这一点。在我看来,这在很大程度上取决于每个人的 configuration/setup 并且某些事情必须到位才能使此功能正常工作。
显然它对我不起作用,但与其 post 关于如何解决我的特定情况的问题,我认为最好了解 PhpStorm 如何确定函数定义的用法。希望结果将是一个故障排除步骤列表,如果此功能不适用于 "Validate Caches/Restart" 以外的人并升级到最新版本,则可以检查该列表。
我觉得在不知道此功能如何找到用法的情况下,我们只能通过反复试验来了解它的工作原理。如果我们知道 A 和 B 必须为真才能使此功能起作用,那么我们就可以系统地确保 A 和 B 实际上为真。
为清楚起见,问题是这样的。我有一个 class 和一个方法 ClassA::Method1()
。我将 ClassA
组合成其他 classes,ClassB
和 ClassC
- 每个都使用 ClassA::Method1()
。我正在尝试转到 Method1
的 ClassA
中的方法定义,右键单击它,选择 "Find Usages" 并期望它在 classes ClassB
和 ClassC
(或任何其他碰巧使用它的人)。
PhpStorm 如何确定用法?它基于注释吗?命名空间?两者的结合?还是完全不同?
我可能是通过反复试验弄明白了这一点。它似乎遵循 namespaces/type 提示和 PSR-4 标准。但是,如果您正在为接口编程,PhpStorm 似乎无法找到具体 class 方法的用法。特别是当具体 class 扩展抽象 class 并实现一个扩展接口的接口时,抽象 class 实现。我开发了一个要点(带有注释)来说明这一点。
https://gist.github.com/dlanz/484c1584b5cbe054b9402bde56afae81
简而言之,如果您要针对接口进行编程,则必须在接口上使用 "Find Usages"。如果一个接口扩展了另一个接口,并且您只想查找扩展接口的用法,但要查找它继承的方法——您要么运气不好,要么必须在扩展接口中重新定义接口方法。或者你永远不能扩展接口,但有时它是有意义的。