首页/开发/代码质量与评审速查/PHPStan:PHP 静态分析(可选级别)
规范与静态检查65 条

PHPStan:PHP 静态分析(可选级别)

PHPStan 用级别 0-10 控制分析严格度,逐级提升并逐级修问题;支持基线文件冻结存量报错,配 phpstan.neon 指定扫描路径与级别。

PHPStan 是什么

PHPStan 是 PHP 的静态分析工具,用级别控制分析严格度:级别越低越宽松,越高检查越深、报错也越多。它支持用基线文件冻结存量报错,用 phpstan.neon 指定扫描路径、级别与忽略项。典型升级路径是先把当前级别锁住过 CI,再每个迭代尝试提升一级并修完新增报错。

基本信息

严格度用级别表示,逐级递增
配置文件phpstan.neon(路径、级别、忽略项)
存量处理--generate-baseline 生成基线文件
运行方式vendor/bin/phpstan analyse
集成方式编辑器插件、CI、pre-commit 钩子

典型使用场景

  • 新项目从合理级别起步,老项目先用基线冻结存量
  • CI 中把新增报错当失败,阻止问题继续累积
  • 重构前后对比报错数量,量化改动的实际收益
  • 接入框架扩展包,提升对框架 API 的分析准确度
  • 升级 PHP 大版本前,先用静态分析找出兼容性问题
  • 把类型声明缺失较多的模块列为专项清理对象

配置与运行

配置与运行
# phpstan.neon
parameters:
    level: 6
    paths:
        - src
    ignoreErrors:
        - '#Call to an undefined method#'

# 命令行
# vendor/bin/phpstan analyse                     按配置分析
# vendor/bin/phpstan analyse --generate-baseline 生成基线,冻结存量报错

级别提升的阶段

级别区间检查强度适用阶段
较低级别基础语法与明显错误老项目刚接入,先跑通再说
中等级别类型与调用关系检查常规项目的起跑线
较高级别更严格的类型推断逐步提升的主要区间
最高级别接近逐行严格推断核心模块或全新代码
级别的编号与上限随版本演进:升级 PHPStan 之前先核对官方文档中的级别定义,避免按旧印象配置,出现与预期不符的报错量。
提升路径:先锁当前级别过 CI,再每个迭代尝试加一级并修完新报错。跳级提升会让历史代码的报错数量失控,团队很快放弃。每次提级后把新增报错按类型归类,优先修类型声明与调用签名这类会连锁的问题。

易错点

  • 直接上最高级别:历史代码报错成千上万,无法收尾
  • 基线文件提交后又手工编辑:报错判定漂移,基线逐渐失真
  • 忽略项写成过宽的正则:新的同类问题被一起吞掉
  • 只对部分目录跑分析:被排除的路径长期无人检查,问题在运行期才暴露

数据来源与参考

  • PHPStan 官方文档(phpstan.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌