admin管理员组文章数量:1033338
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)。严格程度随级别而增加。
- 基本检查,未知类,未知函数,调用的未知方法
$this
,传递给这些方法和函数的参数数量错误,总是未定义的变量 - 可能未定义的变量,未知的魔法方法和类的
__call
属性__get
- 检查所有表达式(不仅仅是
$this
)的未知方法,验证 PHPDocs - 返回类型,分配给属性的类型
- 基本死代码检查 – 始终为假
instanceof
和其他类型检查、死else
分支、返回后无法到达的代码;等等。 - 检查传递给方法和函数的参数类型
- 报告缺失的类型提示
- 报告部分错误的联合类型 — 如果你调用仅存在于联合类型中的某些类型上的方法,则级别 7 开始报告该情况;其他可能不正确的情况
- 报告调用方法和访问可空类型的属性
- 对类型要严格
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 选项将忽略这些错误。
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)。严格程度随级别而增加。
- 基本检查,未知类,未知函数,调用的未知方法
$this
,传递给这些方法和函数的参数数量错误,总是未定义的变量 - 可能未定义的变量,未知的魔法方法和类的
__call
属性__get
- 检查所有表达式(不仅仅是
$this
)的未知方法,验证 PHPDocs - 返回类型,分配给属性的类型
- 基本死代码检查 – 始终为假
instanceof
和其他类型检查、死else
分支、返回后无法到达的代码;等等。 - 检查传递给方法和函数的参数类型
- 报告缺失的类型提示
- 报告部分错误的联合类型 — 如果你调用仅存在于联合类型中的某些类型上的方法,则级别 7 开始报告该情况;其他可能不正确的情况
- 报告调用方法和访问可空类型的属性
- 对类型要严格
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 选项将忽略这些错误。
本文标签: PHPStan – PHP静态分析工具推荐
版权声明:本文标题:PHPStan – PHP静态分析工具推荐 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748033093a2244292.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论