Karp 的技术博客

这里介绍一款PHP代码静态分析工具:PHPStan,不需要运行代码,也可以对代码进行严格的语法检测,尽量将代码运行错误率降到最低。

PHPStan

Xnip2024-05-07_19-11-47.png

安装

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 的所有检查。

  1. 基本检查,未知类、未知函数、在 $this 调用的未知方法、传递给这些方法 (method) 和函数 (function) 的参数数量错误和始终未定义的变量。
  2. 可能未定义的变量、 在用了 __call__get 的类的未知魔术方法和属性。
  3. 所有表达式的未知方法(不仅仅在 $this),验证 PHPDocs 。
  4. 返回类型,分配给属性 (property) 的类型。
  5. 基本的死代码 (dead code) 检查 —— 总是 false 的 instanceof 检查和其他类型检查,死的 else 分支,在 return 之后不可访问的代码等等。
  6. 检查传递给方法和函数的参数类型。
  7. 报告缺失的类型提示。
  8. 报告部分错误的联合类型 —— 如果你调用的方法只存在于联合类型中的某些类型上,级别 7 会开始报告;其他可能错的场景。
  9. 报告调用方法和访问可能为 null 的属性。
  10. 严格控制 mixed 类型 —— 您可以对其进行的唯一操作是将其传递给另一个 mixed

参考文献 :

https://breeze2.github.io/blog/practice-php-static-analysis-tool-phpstan
https://learnku.com/docs/phpstan/2022/gui-ze-ji-bie/13802

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年05月07日 11:15
3

目录

来自 《PHP代码静态分析工具PHPStan》
774 文章数
0 评论量
9 分类数
779 页面数
已在风雨中度过 9年277天3小时38分