phploc 是独立 cli 工具,非 composer 库,不可用 composer require 安装或在代码中直接调用;正确用法是通过 exec() 或 shell_exec() 运行 phploc 命令,或改用 php-metrics 等可集成方案。

PHPLOC 不是 Composer 库,不能用 composer require 直接安装
PHPLOC 是 Sebastian Bergmann 开发的独立命令行工具,不是设计为被其他 PHP 项目 require 的类库。它没有 autoload 配置,也没有提供可实例化的公共 API。试图运行 composer require phploc/phploc 会失败(包不存在),或装上旧版但无法在代码中调用 —— 因为它压根不支持“引入后调用函数”这种用法。
常见错误现象:Class 'PHPLOC\CLI\Application' not found 或 Target class [PHPLOC\Analyser] does not exist,本质是误把 CLI 工具当成了可集成库。
- 它只提供全局二进制命令
phploc,靠解析 AST 统计,不暴露分析器类给外部调用 - Composer 官方包名
phploc/phploc已废弃多年,Packagist 上已移除 - 如果你真需要在 PHP 脚本里获取行数/复杂度,得换方案(见下一条)
想在 PHP 项目中动态调用统计功能?用 exec() 或 shell_exec() 运行 phploc 命令
这是最轻量、最可靠的方式:把 phploc 当作外部工具调用,捕获输出再解析。前提是系统已安装 phploc(推荐用 PHAR 方式,避免 Composer 环境污染)。
实操建议:
- 下载最新 PHAR:
wget https://phar.phpunit.de/phploc.phar,然后chmod +x phploc.phar - 在 PHP 中执行:
$output = shell_exec('php phploc.phar --quiet --json src/ 2>/dev/null'); - 注意路径必须是相对或绝对有效路径;
src/后不能带尾部斜杠(某些版本会报错) - 返回的是 JSON 字符串,需
json_decode($output, true)解析;若为空或null,检查是否因权限、路径不存在或 phploc 版本太老(v7+ 才支持--json)
替代方案:用 php-metrics 或 phpcpd 的底层组件做轻量集成
如果坚持“不依赖 shell 命令”,可用 php-metrics(基于 PHP-Parser,有完整 autoload)—— 它提供 Metrics\Analyzer 类,能直接在代码中调用:
$analyzer = new \Metrics\Analyzer(); $result = $analyzer->analyze(['src/']); echo $result['classes']['count']; // 类数量
但要注意:
-
php-metrics的圈复杂度算法与 phploc 不完全一致(它用 PHP-Parser AST,phploc 用 token_get_all + 自定义逻辑) - 它默认不统计空行/注释行,而 phploc 的
--count-tests或--exclude行为更精细 - 性能差异明显:phploc 处理大型项目更快(C 扩展级优化),php-metrics 在大目录下可能内存溢出
Windows 下执行失败?重点检查 phploc.phar 的 PHP 版本兼容性
phploc v9+ 要求 PHP 8.1+,而很多 Windows 用户仍用 XAMPP/WAMP 的 PHP 7.4。错误现象:ParseError: syntax error, unexpected token "readonly"(v9 引入了 readonly 属性)。
解决方式:
- 降级使用 phploc v8:
wget https://github.com/sebastianbergmann/phploc/releases/download/8.3.2/phploc-8.3.2.phar - 或改用
php -d memory_limit=-1 phploc.phar ...强制不限内存(Windows 默认限制常导致中断) - 别用
phploc.bat封装脚本 —— 它可能调用系统 PATH 中的旧 PHP,而非你预期的版本
真正麻烦的从来不是“怎么装”,而是搞清 phploc 本质是个单点工具,不是 SDK。硬要把它塞进 vendor/ 并 new 出来,只会浪费两小时查 autoload 错误。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











