PHPStan – PHP静态分析工具推荐

PHPStan是一个开源的PHP静态分析工具,旨在帮助开发者发现和修复PHP代码中的问题。它通过分析PHP源代码,检查变量的类型、函数调用的参数和返回值,以及其他常见错误。PHPStan提供了准确的错误报告和警告,帮助开发者在编译前发现问题

PHPStan – PHP静态分析工具推荐

PHPStan是一个开源的PHP静态分析工具,旨在帮助开发者发现和修复PHP代码中的问题。它通过分析PHP源代码,检查变量的类型、函数调用的参数和返回值,以及其他常见错误。PHPStan提供了准确的错误报告和警告,帮助开发者在编译前发现问题,提高代码的质量和可靠性。

PHPStan 的文档非常全面且简明扼要,您只需花一天时间阅读即可开始试用。本文的目的不是重复该文档。本文的目的是鼓励您立即将 PHPStan 添加到您的代码库中,以便提供代码质量及工作效率。

查看一段代码时,有些内容无需运行即可确定是错误的。这包括但不限于:

  • 调用不存在的方法
  • 调用具有错误参数类型或数量的方法
  • 调用 null 上的方法
  • 返回错误类型或忘记返回方法的结果

理想情况下,您可能还希望在代码库中强制执行一些常识性编码标准。此类准则的示例包括:

  • 不存在闲置的未使用方法或变量。包括只设置但从未使用过的变量。
  • 全部使用严格类型
  • 没有通用数组返回类型。在大多数情况下,作为方法契约的一部分,我希望确保数组仅包含字符串、整数或 TotalCalculator 接口的实例。

值得庆幸的是,PHPStan 开源静态分析工具可以帮助您解决所有这些问题,甚至更多。

如何安装

将 PHPstan 添加到你的项目非常简单,只需要运行下面的 composer 命令即可。

代码语言:javascript代码运行次数:0运行复制
composer require --dev phpstan/phpstan

这通常会(取决于您的 Composer 配置)添加可执行文件vendor/bin/phpstan。您可以开始分析,只需运行:

代码语言:javascript代码运行次数:0运行复制
vendor/bin/phpstan analyse src/Path/To/Some/File.php

级别

提到集成静态分析工具时最常见的反对意见是代码已经很混乱,现有的问题会导致开发陷入停滞。

PHPStan 对此非常重视,并提供了多个不同严格程度的级别。这允许在现有项目中逐步采用 PHPStan。目前有十个级别(0-9)。严格程度随级别而增加。

  1. 基本检查,未知类,未知函数,调用的未知方法$this,传递给这些方法和函数的参数数量错误,总是未定义的变量
  2. 可能未定义的变量,未知的魔法方法和类的__call属性__get
  3. 检查所有表达式(不仅仅是$this)的未知方法,验证 PHPDocs
  4. 返回类型,分配给属性的类型
  5. 基本死代码检查 – 始终为假instanceof和其他类型检查、死else分支、返回后无法到达的代码;等等。
  6. 检查传递给方法和函数的参数类型
  7. 报告缺失的类型提示
  8. 报告部分错误的联合类型 — 如果你调用仅存在于联合类型中的某些类型上的方法,则级别 7 开始报告该情况;其他可能不正确的情况
  9. 报告调用方法和访问可空类型的属性
  10. 对类型要严格mixed– 唯一允许的操作就是将其传递给另一个mixed

正如您所看到的,级别还可以让您了解 PHPStan 可以为您做什么。

就严格程度而言,我个人认为 6 是一个平衡的选择,最高级别是最终目标。要配置级别,您可以传递 -l 选项,如下所示:

代码语言:javascript代码运行次数:0运行复制
vendor/bin/phpstan analyse -l 6 src/Path/To/Some/Dir

配置

PHPStan 使用名为NEON的配置格式,与 yaml 非常相似。您可以通过 -c 命令行选项传递要使用的配置文件,如下所示:

代码语言:javascript代码运行次数:0运行复制
vendor/bin/phpstan analyse -c phpstan.neon

在配置文件中,您可以指定要使用的级别、要分析的路径、要忽略的错误等等,完整列表请参见此处。

值得注意的是,每个项目|管道可以使用多个配置文件。假设您正在将十年前编写的代码迁移到全新的 Symfony 应用程序。您可能将旧版应用程序放在一个文件夹中,将 Symfony 应用程序放在另一个文件夹中,并且您希望对每个应用程序使用不同的级别。

值得注意的是,如果您没有明确提供配置文件,PHPStan 将在当前目录中查找名为phpstan.neon或 的文件phpstan.neon.dist。在本文的其余部分,我不会在分析时传递配置文件,而会让 PHPStan 自行解决它。

基线(又称为忽略错误)

在“级别”主题中,我提到人们由于项目的当前状态而不愿采用静态分析。可能是因为我们现在不想处理所有存在的问题,但我们希望立即开始使用静态分析,并将其作为管道中断条件。

PHPStan 完美的支持类似的需求,您可以自动忽略所有现有错误。

为此,您的 phpstan.neon.dist 可能看起来像这样:

代码语言:javascript代码运行次数:0运行复制
# phpstan.neon.dist
includes:
    - phpstan-baseline.neon
parameters:
   level: 6

phpstan-baseline.neon 的存在很重要,它最初只是与 phpstan.neon.dist 同一级别的空文件。

然后使用 generate-baseline 选项运行分析:

代码语言:javascript代码运行次数:0运行复制
vendor/bin/phpstan analyse src/Service --generate-baseline

运行分析后,假设你的文件有一些错误,phpstan-baseline.neon 文件将如下所示

再次运行该命令,不使用 generate-baseline 选项将忽略这些错误。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748033068a4721483.html

相关推荐

  • PHPStan – PHP静态分析工具推荐

    PHPStan是一个开源的PHP静态分析工具,旨在帮助开发者发现和修复PHP代码中的问题。它通过分析PHP源代码,检查变量的类型、函数调用的参数和返回值,以及其他常见错误。PHPStan提供了准确的错误报告和警告,帮助开发者在编译前发现问题

    5小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信