PHPMD 是 PHP Depend 的一个衍生项目,旨在成为著名 Java 工具 PMD 的 PHP 等价物。

该软件包的官方仓库似乎已消失,因此该软件包已被冻结。

2.7.1 2019-01-18 14:25 UTC

README

PHPMD 是 PHP Depend 的一个衍生项目,旨在成为著名 Java 工具 PMD 的 PHP 等价物。PHPMD 可以看作是 PHP Depend 测量原始指标流的用户友好的前端应用程序。

https://phpmd.org

Latest Stable Version License Travis Build Status Scrutinizer Build Status Scrutinizer Code Quality https://coveralls.io/repos/github/SomeBlackMagic/phpmd/badge.svg?branch=master

安装

请参阅 https://phpmd.org/download/index.html

命令行使用

输入 phpmd [文件名|目录] [报告格式] [规则集文件],例如

mapi@arwen ~ $ phpmd PHP/Depend/DbusUI/ xml rulesets/codesize.xml

rulesets/codesize.xml 规则集文件可能如下所示

<?xml version="1.0" encoding="UTF-8" ?>
<pmd version="0.0.1" timestamp="2009-12-19T22:17:18+01:00">
  <file name="/projects/pdepend/PHP/Depend/DbusUI/ResultPrinter.php">
    <violation beginline="67"
               endline="224"
               rule="TooManyMethods"
               ruleset="Code Size Rules"
               package="PHP_Depend\DbusUI"
               class="PHP_Depend_DbusUI_ResultPrinter"
               priority="3">
      This class has too many methods, consider refactoring it.
    </violation>
  </file>
</pmd>

您可以将包含 PHP 源代码的文件名或目录名传递给 PHPMD。

PHPMD Phar 分发版包括规则集文件,即使上面的 "rulesets/codesize.xml" 参数看起来像一个文件系统引用。

命令行选项

  • 注意,默认输出是 XML 格式,因此您可以将其重定向到文件并使用 XSLT 或其他操作。

  • 您还可以使用缩短的名称来引用内置的规则集,如下所示

    phpmd PHP/Depend/DbusUI/ xml codesize
    
  • 命令行界面还接受以下可选参数

    • --minimumpriority - 规则优先级阈值;优先级低于此阈值的规则将不会使用。
    • --reportfile - 将报告输出发送到指定的文件,而不是默认输出目标 STDOUT
    • --suffixes - 以逗号分隔的字符串,表示有效的源代码文件扩展名,例如 php,phtml。
    • --exclude - 以逗号分隔的字符串,表示用于忽略目录的模式。
    • --strict - 还报告带有 @SuppressWarnings 注释的节点。
    • --ignore-violations-on-exit - 即使找到任何违规行为,也将以零代码退出。

    示例命令行

    phpmd PHP/Depend/DbusUI xml codesize --reportfile phpmd.xml --suffixes php,phtml
    

使用多个规则集

PHPMD 使用所谓的规则集来配置/定义将被应用于测试源的一组规则。PHPMD 的默认分发版已经附带了一些默认集,可以直接使用。您可以使用集合的名称调用 PHPMD 的 cli 工具来应用此配置

~ $ phpmd /path/to/source text codesize

但如果您想对源应用多个规则集呢?您还可以将规则集名称的列表(以逗号分隔)传递给 PHPMD 的 cli 工具

~ $ phpmd /path/to/source text codesize,unusedcode,naming

您还可以混合自定义的 规则集文件 和内置规则集

~ $ phpmd /path/to/source text codesize,/my/rules.xml

就是这样。使用此行为,您可以指定要检查源代码的自定义规则集组合。

使用多个源文件和文件夹

PHPMD还允许您指定多个源目录,以便您可以为代码的某些部分创建一个输出。

~ $ phpmd /path/to/code,index.php,/another/place/with/code text codesize

退出代码

PHPMD的命令行工具目前定义了三种不同的退出代码。

  • 0,这个退出代码表示一切如预期进行。这意味着没有错误/异常,PHPMD也没有在测试的代码中检测到任何违规规则。
  • 1,这个退出代码表示在执行期间发生了错误/异常,这中断了PHPMD的执行。
  • 2,这个退出代码表示PHPMD在未出现错误/异常的情况下处理了测试代码,但它已经检测到分析源代码中的规则违规。您还可以使用--ignore-violations-on-exit标志来防止这种行为,即使发现任何违规,也会导致0

渲染器

目前,PHPMD附带以下四个渲染器

  • xml,将报告格式化为XML。
  • text,简单的文本格式。
  • html,包含可能问题的单个HTML文件。
  • json,格式化JSON报告。

API文档

您可以在codedoc.pub找到最新的类API文档。