【问题标题】:How to write a PHP Mess Detector rule that has a project wide context instead of only on a class level? [duplicate]如何编写具有项目范围上下文而不是仅在类级别上的 PHP Mess Detector 规则? [复制]
【发布时间】:2013-06-18 11:45:16
【问题描述】:

我想编写一个规则来查找项目中所有公共未使用的功能。我已经复制并修改了原始的 UnusedPrivateMethod 以使其工作。但可惜它工作得太好了,找到了项目中的所有公共功能。

这样做是因为公共函数通常是从其他类调用的,并且规则的范围似乎在类级别。所以在每个类中都没有使用公共函数,因此是结果的一部分。

因此,我如何编写具有项目级别而不是类级别上下文的规则的问题?

【问题讨论】:

  • 我会说这是不可能的。 $class->$variable() 之类的东西是合法的。和 _get() 将很难使用。我会说这是一项手动工作,而不是自动化工作
  • 感谢您的评论。我也从答案中看到,这似乎是不可能的。 :(
  • 关于骗子:你问的是“如何挖洞?我可以用锤子吗?”人们告诉你“你不能。锤子不适合那个。但这里有一份工具清单,不能挖洞”,你回答说:“但我想用锤子”。
  • 嗨,戈登,如果所有问题对您来说都像一个人可以回答另一个问题一样简单,我很抱歉。我想具体了解有关 PHP Mess 检测器的解决方案;即使使用其他工具存在类似的解决方案。 PS:问题的动机是寻找公共功能,但问题是关于编写具有项目范围上下文的规则。
  • 当具体答案是“你不能。这是错误的工具”时,我认为重新打开问题没有任何价值。我会把它留给另一个模组来处理你的旗帜,所以你会得到第二个意见。但对我来说it's a classic XY problem.

标签: php phpmd


【解决方案1】:

仅仅通过解析你的项目源代码是不可能获取所有公共方法调用的,因为有些调用可以使用

call_user_func()

$object->$method()

我建议您尽可能全面地使用单元测试来覆盖该项目。当您执行它们时,您将获得代码覆盖率统计信息。它可以以易于阅读的形式呈现。您将看到哪些方法被调用,哪些未被使用。

是的,您将不得不花一些时间来编写这些单元测试。但这完全值得。

看看php unit testingcode coverage

【讨论】:

  • 我必须承认,我有点失望,这并不是那么可能,但我对开始使用“代码覆盖”的前景感到兴奋。
  • 我想给你赏金,但似乎标记为我的问题的重复项禁止我这样做?
  • 不用担心。知道我以某种方式解决了您的问题就足够了 =)
【解决方案2】:

前段时间我遇到了同样的问题,最后为此进行了动态代码分析。基本上我运行我的网站一段时间,并有 xdebug 输出使用文件。为了解析所有这些,我创建了一个小工具PHPAnalyzer,它遍历这些文件并输出所有使用(或未使用)函数的统计信息。在这个统计中是它被调用的次数。该工具并未真正完善,欢迎任何贡献。

【讨论】:

  • 感谢您的回答。我也会看看你写的工具。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2012-02-28
  • 2020-08-15
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多