PHPStan必须本地安装,因配置加载、扩展注册和自动加载均依赖项目级vendor/结构及Composer自动加载机制;全局安装会导致phpstan.neon被忽略、bootstrap不生效、app/等目录静默跳过。

别全局装 PHPStan —— 装了也白装,配置不生效、类找不到、扫描静默跳过,你以为它在分析,其实它连你的 app/ 目录都没扫进去。
为什么全局安装 phpstan 会失效
PHPStan 的配置加载(phpstan.neon)、扩展注册(比如 Larastan)、自动加载(autoload_files)全部依赖项目级 vendor/ 结构和 Composer 的 autoloader。全局安装时:
– phpstan.neon 文件被完全忽略
– bootstrapFiles 和 autoload_files 不执行
– Laravel 的 app()、模型静态方法全标“未定义”
– 扫描只走默认 src/,app/、routes/、index.php 静默跳过
– 错误信息里不会提醒“配置没读到”,它就 quietly 按 level 0 跑一遍
正确安装:必须本地 + 显式版本 + --dev
进入项目根目录(确保有 composer.json),执行:
composer require --dev phpstan/phpstan:^1.10
关键点:
立即学习“PHP免费学习笔记(深入)”;
-
--dev必须加,静态分析工具不该进生产环境 - 版本必须显式写
^1.10或^2.0(Larastan 2.x 需 PHPStan 2.x),别让 Composer 自己选个^0.12 - 装完命令是
vendor/bin/phpstan,不是phpstan全局命令 - 如果已有旧版锁死(如
"phpstan/phpstan": "^0.12"),要手动改composer.json并运行composer update phpstan/phpstan
phpstan.neon 配置必须放对位置、写对结构
文件名只能是 phpstan.neon(不是 .neon、phpstan.yaml 或 phpstan.neon.dist),且必须放在项目根目录。
内容至少包含 parameters: 块,且缩进严格(YAML 对空格敏感):
parameters:
level: 7
paths:
- app
- routes
- database
scanFiles:
- index.php
- public/index.php注意:
-
paths默认只扫src/,Laravel 项目必须手动加app、routes等 - 纯函数文件若无命名空间或类声明,会被直接跳过
-
scanFiles用于强制扫描入口文件(如index.php),否则app()这类全局调用无法推导
装完后怎么验证真生效了
别只跑 vendor/bin/phpstan analyse 看有没有报错——它可能正用默认配置扫着 src/ 下三行代码。
验证方式:
- 删掉
phpstan.neon,再跑一次:如果错误数几乎不变,说明配置本来就没被读到 - 在
phpstan.neon里故意写错缩进(如level:顶格),PHPStan 不会报 YAML 错误,而是继续静默用默认值 —— 这是最容易被忽略的失效信号 - 运行
vendor/bin/phpstan analyse --debug,看输出里是否打印出你配置的paths列表 - 检查
composer show phpstan/phpstan输出的版本号,确认是1.10.x或2.0.x,不是0.12.x
真正麻烦的从来不是装不上,而是装上了却信了它正在工作。



















