PHPStan必须本地安装,全局安装等于没装;正确做法是在项目根目录执行composer require --dev phpstan/phpstan:^1.10,配置文件phpstan.neon需置于根目录且含正确parameters块,paths须显式包含实际代码路径。

必须本地安装,全局安装等于没装。 PHPStan 的配置加载、扩展注册、自动加载文件注入全部依赖项目 vendor 目录结构和 Composer 的 autoloader 机制。全局安装(composer global require phpstan/phpstan)会导致 phpstan.neon 被忽略、autoload_files 不执行、Laravel 类找不到、扫描静默跳过文件——它看起来“能运行”,但实际什么都没分析对。
怎么装才对:只用这一条命令
进入项目根目录(确保有 composer.json),执行:
composer require --dev phpstan/phpstan:^1.10
注意三点:
- 必须加
--dev,静态分析工具不该进生产环境 - 版本要明确指定
^1.10或^2.0(Larastan 2.x 需 PHPStan 2.x),别让 Composer 自己选个^0.12这种老版本 - 装完后命令路径是
vendor/bin/phpstan,不是phpstan全局命令
为什么 phpstan analyse 报 “Command not defined”
这不是命令拼错了,而是 PHPStan 主体根本没装成功,或者装了但被 Composer 忽略了。常见原因:
立即学习“PHP免费学习笔记(深入)”;
- 误用了
composer global require,导致本地vendor/bin/phpstan不存在 - 项目里已有旧版锁死:检查
composer.json中"phpstan/phpstan": "^0.12"这类写法,手动改成"^1.10"并运行composer update phpstan/phpstan - 装了
nunomaduro/larastan却没装phpstan/phpstan—— Larastan 不是独立可执行工具,它只是给 PHPStan 提供规则的配置包
phpstan.neon 配置失效的典型表现和修复点
明明写了 level: 7 却只报几个基础错误,或 app()、Post::query() 被标“未定义方法”,说明配置没生效。关键检查项:
- 文件名必须是
phpstan.neon(不是phpstan.yaml、.neon或phpstan.neon.dist),且放在项目根目录 - 必须包含
parameters:块,且level和paths在其下缩进正确(YAML 对空格敏感) -
paths默认只扫src/,如果你代码在app/或lib/,得手动加进去;纯函数文件若无命名空间,会被直接跳过 - 用 Larastan?必须显式写
includes: - vendor/nunomaduro/larastan/extension.neon,不写就等于没引入 Laravel 规则
最常被忽略的一点:PHPStan 不会报错告诉你“配置没读到”,它只会安静地用默认规则跑一遍——你以为它在工作,其实它连你的 config/app.php 都没看一眼。



















