phpmd 不推荐全局安装,因规则依赖项目上下文、path 配置易出错、版本无法锁定;应按项目安装为开发依赖,通过 vendor/bin/phpmd 调用,并显式指定规则文件或标准规则名。

PHPMD 不能通过 Composer 全局安装后直接当命令用——它必须作为项目依赖引入,再配合 phpmd 可执行脚本调用,否则你会遇到 command not found 或空配置报错。
为什么 composer global require phpmd/phpmd 不推荐
全局安装看似省事,但实际会引发三个硬伤:
- PHPMD 的规则集(如
codesize、design)依赖当前项目的 autoloader 和 PHP 版本,全局安装时无法感知项目上下文,常报Class not found或跳过自定义规则 - Composer 全局 bin 目录(如
~/.composer/vendor/bin)不一定在$PATH里,即使加了,不同项目 PHP 版本混用时容易触发PHP Parse error - 团队协作中,全局依赖无法被
composer.json锁定版本,CI 流水线可能因本地环境差异失败
正确做法:按项目安装 + 使用 vendor/bin/phpmd
把 PHPMD 当作开发依赖写进当前项目,确保规则和解析器与代码同环境运行:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 运行
composer require --dev phpmd/phpmd(注意--dev,它只在开发环境生效) - 安装后,可执行文件自动落在
vendor/bin/phpmd,无需额外配置 PATH - 检查是否生效:运行
./vendor/bin/phpmd --version,输出应为类似2.15.0 - 若提示权限问题(尤其 Windows WSL 或 macOS),给脚本加执行权限:
chmod +x vendor/bin/phpmd
怎么写最简可用的 PHPMD 检查命令
别一上来就堆规则,先跑通基础路径扫描:
- 检查单个文件:
./vendor/bin/phpmd src/TextParser.php text codesize - 检查整个目录(排除测试):
./vendor/bin/phpmd src/ text design --exclude tests/ -
text是最轻量的输出格式;想生成 HTML 报告需加html并指定--reportfile - 常见错误:
Could not find any ruleset file—— 这是因为你用了不存在的规则名,可用规则只有codesize、unusedcode、naming、design、controversial、cleancode
自定义规则文件时最容易漏掉的一件事
PHPMD 默认不读取项目根目录下的 phpmd.xml,必须显式传参:
- 正确写法:
./vendor/bin/phpmd src/ xml phpmd.xml(注意第三个参数是规则文件路径) - 规则文件必须用
<ruleset></ruleset>根节点,且每条<rule></rule>必须指定ref属性,例如ref="phpmd/rules/codesize.xml" - 路径是相对于 PHPMD 自身安装位置的,不是项目根目录——所以建议用官方提供的标准规则名(如
codesize),避免手写绝对路径出错
规则越细,扫描越慢;一个 5000 行的 src/ 目录启用全部规则可能耗时 8–12 秒。真要集成到 pre-commit,得先用 --suffix php,php3,inc 限定文件类型,再配合 git diff --cached --name-only 只扫变更文件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










