phan 安装失败主因是 php 版本低于 8.0 或缺失 ast 扩展;执行报“class 'phan\phan' not found”系 autoload 未正确配置;phan --init 生成的 config.php 需手动设置 directory_list 等关键参数;ci 中需调优 memory-limit、severity 和 processes。

composer require phan/phan 装不上?先确认 PHP 版本和扩展
Phan 对 PHP 版本要求严格,phan/phan 8.x 起只支持 PHP 8.0+,7.x 版本已停止维护。装不上常见原因是本地 PHP 版本低于要求,或缺失 ast 扩展(Phan 解析代码依赖它)。
- 运行
php -v确认版本 ≥ 8.0;低于则需升级 PHP 或降级 Phan(如用phan/phan:^3.2支持 PHP 7.2+,但功能受限) - 检查
ast是否启用:php -m | grep ast;没输出说明未安装,Linux 下通常用pecl install ast+ 在php.ini加extension=ast - Windows 用户注意:
ast扩展在 Windows 官方 PHP 包中默认不带,需手动下载 DLL 并配置,容易卡在这一步
vendor/bin/phan 执行报错“Class 'Phan\Phan' not found”
这是自动加载失败的典型表现,根本原因不是 Phan 没装好,而是项目根目录下缺少 phan.phar 或 composer.json 中未声明 autoload 配置,导致 Composer 无法注册 Phan 的类。
- 确保用
composer require --dev phan/phan(加--dev是惯例,Phan 属开发工具) - 检查
vendor/autoload.php是否被正确引入——你执行vendor/bin/phan时,它内部会 require 这个文件;如果项目入口没加载它(比如直接跑脚本),就会报这个错 - 别手贱删
vendor/composer/autoload_classmap.php:Phan 的类靠它映射,删了就找不到Phan\Phan
phan --init 生成的 .phan/config.php 怎么改才有效
phan --init 只是生成骨架,不配参数等于没用。Phan 默认只扫描当前目录下的 *.php,且关闭所有插件和类型检查,实际项目几乎必调。
- 关键参数
'directory_list' => ['src', 'tests']必须显式列出要分析的目录,漏掉src就等于啥也没扫 - 开启严格模式:
'analyzed_file_extensions' => ['php'], 'enable_include_path_checks' => true,否则 include/require 错误不报 - 类型检查依赖
'plugins' => ['AlwaysReturnPlugin', 'UnreachableCodePlugin'],不加插件,很多逻辑问题压根不触发 - 别照抄示例里的
'exclude_analysis_directory_list':如果填了['vendor']却忘了加vendor到directory_list,整个项目就成白屏
CI 中跑 phan 报 “Too many issues” 或内存溢出
Phan 默认内存限制低(尤其 Docker 环境),且对大项目默认开全量检查,容易 OOM 或超时。
- 加
--memory-limit 512M参数(或设环境变量PHAN_MEMORY_LIMIT=512M),别依赖 php.ini 的memory_limit,Phan 有自己解析逻辑 - 用
--minimum-severity 3过滤掉 info 级别(severity=1/2)噪音,专注 warning/error(3/4/5) - 排除测试文件:
'exclude_analysis_directory_list' => ['tests', 'examples'],否则 Mock 类、数据桩会大量报错 - Phan 8.2+ 支持
--processes $(nproc)并行,但 Docker 默认单核,硬开反而慢;CI 中建议显式设--processes 2
配置写错一行,Phan 就可能静默跳过整个目录,或者把错误当 warning 忽略——它不会报配置错误,只会少结果。调参时最好用 --verbose 看它实际加载了哪些文件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











