PHPStan 有什么用?怎么用?
PHPStan 是一个 PHP 的静态分析工具,在不运行代码的情况下就能帮你发现潜在问题,比如:
传错类型(把
string传给接受int的函数)访问不存在的属性 / 方法
null没处理好永远不会执行到的代码
数组 key/值类型不一致
返回值不符合声明
注释和真实类型不匹配
它非常适合:
想提升代码质量、减少线上 bug、统一团队风格的人(尤其是中大型项目)。
一、PHPStan 有什么用(通俗点说)
1. 比 IDE 检查更严格
IDE 通常只做简单检查
PHPStan 会进行类型推断,比如:
/** @return int */
function foo() {
return 'abc';
}
PHPStan 会报:
Return type int does not match string
2. 让 PHP “像强类型语言一样安全”
例如:
$user = null;
echo $user->name;
PHPStan 直接警告:
Access to property name on null
避免线上 500 error
3. 帮助发现逻辑 bug
if ($x > 10 && $x < 5) {
...
}
PHPStan:
Condition is always false
4. 提示你补全类型声明 / PHPDoc
长远看:
更好维护
IDE 更聪明
减少“这玩意到底是什么类型”的痛苦
二、PHPStan 怎么用?
1. 安装(推荐 composer 局部安装)
composer require --dev phpstan/phpstan
安装完成后会有执行文件:
vendor/bin/phpstan
2. 初始化配置
vendor/bin/phpstan init
会生成:
phpstan.neon
3. 运行分析
检查 src 目录:
vendor/bin/phpstan analyse src
或者多个目录:
vendor/bin/phpstan analyse src app
三、设置分析级别(1–10)
level 1:最宽松
level 10:最严格(几乎强迫写完美类型)
配置文件示例:
parameters:
level: 5
paths:
- src
- app
建议:
| 阶段 | level |
|---|---|
| 老项目起步 | 2–4 |
| 中期提升 | 5–7 |
| 新项目/规范团队 | 8–10 |
四、常用高级功能
忽略某些错误
parameters:
ignoreErrors:
- '#Call to an undefined method .*#'
Laravel 项目(用扩展)
composer require --dev nunomaduro/larastan
然后:
vendor/bin/phpstan analyse
Symfony 有 symfony 插件
WordPress、Doctrine、PHPUnit…也有专门扩展。
五、与 IDE 一起用
建议配合:
PhpStorm Inspection
CodeSniffer (PSR 规范)
Rector(自动重构)
PHP-CS-Fixer
PHPStan 负责 逻辑安全
CS 工具负责 格式规范
六、示例:真实问题 PHPStan 能抓出来
function add(int $a, int $b): int {
return $a + $b;
}
echo add("123", 5);
PHP 执行没问题
PHPStan 会报警:
Parameter #1 $a of function add expects int, string given
帮助你提前发现“隐形 bug”
七、持续集成(CI)
GitHub Actions 示例:
- name: PHPStan
run: vendor/bin/phpstan analyse
防止“不规范代码”被合并 👍