这里介绍一款PHP代码静态分析工具:PHPStan,不需要运行代码,也可以对代码进行严格的语法检测,尽量将代码运行错误率降到最低。
PHPStan
安装
git包地址 : https://github.com/phpstan/phpstan/tags
$ wget https://github.com/phpstan/phpstan/archive/refs/tags/1.10.67.zip
$ unzip 1.10.67.zip
$ cd phpstan-1.10.67/
$ ls
bootstrap.php composer.json conf LICENSE phpstan phpstan.phar phpstan.phar.asc README.md
使用
PHPStan
静态分析的使用方法十分简单:
$ phpstan analyse [-c|--configuration CONFIGURATION] [-l|--level LEVEL] [--no-progress] [--debug] [-a|--autoload-file AUTOLOAD-FILE] [--errorFormat ERRORFORMAT] [--memory-limit MEMORY-LIMIT] [--] [<paths>]...
- configuration:运行配置文件的路径;
- level:严格级别,0-7,越大越严格;
- no-progress:不显示进度;
- debug:debug模式;
- autoload-file:自动加载文件的路径;
- errorFormat:错误格式;
- memory-limit:内存限制;
- paths:待分析的文件路径。
基线
如果不想先修复所有的报错,但又想运行更严格的级别,可以查看一个叫 基线 的特性。
你也可以使用 --level max
运行最严格的级别。 这将确保您在升级到新版本的 PHPStan
时始终使用最高级别。 ^levelmax
以下是每个级别检查内容的简要概述。级别是累计的。例如,运行级别 5 也会为你完成 0-4 的所有检查。
- 基本检查,未知类、未知函数、在 $this 调用的未知方法、传递给这些方法 (method) 和函数 (function) 的参数数量错误和始终未定义的变量。
- 可能未定义的变量、 在用了
__call
和__get
的类的未知魔术方法和属性。 - 所有表达式的未知方法(不仅仅在
$this
),验证 PHPDocs 。 - 返回类型,分配给属性 (
property
) 的类型。 - 基本的死代码 (dead code) 检查 —— 总是 false 的
instanceof
检查和其他类型检查,死的else
分支,在return
之后不可访问的代码等等。 - 检查传递给方法和函数的参数类型。
- 报告缺失的类型提示。
- 报告部分错误的联合类型 —— 如果你调用的方法只存在于联合类型中的某些类型上,级别 7 会开始报告;其他可能错的场景。
- 报告调用方法和访问可能为 null 的属性。
- 严格控制
mixed
类型 —— 您可以对其进行的唯一操作是将其传递给另一个mixed
。
参考文献 :
https://breeze2.github.io/blog/practice-php-static-analysis-tool-phpstan
https://learnku.com/docs/phpstan/2022/gui-ze-ji-bie/13802