phpstan / phpstan-strict-rules
PHPStan 的额外严格和有意见的规则
Requires
- php: ^7.2 || ^8.0
- phpstan/phpstan: ^1.12.4
Requires (Dev)
- nikic/php-parser: ^4.13.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- 2.0.x-dev
- 1.6.x-dev
- 1.6.1
- 1.6.0
- 1.5.x-dev
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.x-dev
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.0
- 0.12.11
- 0.12.10
- 0.12.9
- 0.12.8
- 0.12.7
- 0.12.6
- 0.12.5
- 0.12.4
- 0.12.3
- 0.12.2
- 0.12.1
- 0.12.0
- 0.11.1
- 0.11
- 0.10.1
- 0.10
- 0.9
- dev-renovate/major-root-composer
- dev-renovate/major-github-actions
- dev-test
This package is auto-updated.
Last update: 2024-09-20 14:07:31 UTC
README
PHPStan 关注于找到代码中的错误。但在 PHP 中,有很多关于如何编写代码的自由度。这个存储库包含了一些额外的规则,围绕严格和强类型代码,没有松散类型转换,为那些希望在极端防御性编程中获得额外安全性的开发者。
- 在
if
、elseif
、三元运算符、!
之后,以及&&
和||
的两侧要求布尔值。 - 在
+
中要求数字操作数或数组,在-
/*
//
/**
/%
中要求数字操作数。 - 在
$var++
、$var--
、++$var
和--$var
中要求数字操作数。 - 这些函数包含一个
$strict
参数以提高类型安全性,它必须设置为true
in_array
(第三个参数)array_search
(第三个参数)array_keys
(第三个参数;只有当第二个参数$search_value
提供时)base64_decode
(第二个参数)
- 在
while
循环条件中和for
循环初始赋值中分配的变量在循环之后不能使用。 - 在 foreach 中设置,由于非空数组而始终循环的变量在循环之后不能使用。
switch
条件和case
值中的类型必须匹配。PHP 默认会松散地比较它们,这可能导致意外的结果。- 检查静态声明的方法是否以静态方式调用。
- 禁止使用
empty()
- 这是一个非常松散的比较(参见 手册),建议使用更严格的版本。 - 禁止使用短三元运算符(
?:
) - 表示弱比较,建议使用空合并运算符(??
)或具有严格条件的三元运算符。 - 禁止使用变量变量(如
$$foo
、$this->method()
等) - 禁止使用 foreach 键和值变量覆盖变量
- 始终为
instanceof
、类型检查is_*
函数和严格比较===
/!==
。可以通过将checkAlwaysTrueInstanceof
/checkAlwaysTrueCheckTypeFunctionCall
/checkAlwaysTrueStrictComparison
设置为false
来关闭这些检查。 - 正确引用和调用的函数名称的案例。
- 正确引用和实现的方法名称的案例。
- 在继承方法中参数类型为逆变,返回类型为协变(也称为 Liskov 替换原则 - LSP)
- 甚至对于静态方法也要检查 LSP
- 要求调用父构造函数
- 禁止使用反引号运算符(如
$ls = `ls -la`
) - 闭包应该直接使用
$this
而不是间接使用$this
变量
后续版本中还将推出更多规则!
安装
要使用此扩展,请在 Composer 中包含它
composer require --dev phpstan/phpstan-strict-rules
如果您还安装了 phpstan/extension-installer,则已设置完毕!
手动安装
如果您不想使用 phpstan/extension-installer
,请将 rules.neon 包含在您的项目 PHPStan 配置中
includes:
- vendor/phpstan/phpstan-strict-rules/rules.neon
禁用规则
您可以使用配置参数禁用规则
parameters: strictRules: disallowedLooseComparison: false booleansInConditions: false uselessCast: false requireParentConstructorCall: false disallowedConstructs: false overwriteVariablesWithLoop: false closureUsesThis: false matchingInheritedMethodNames: false numericOperandsInArithmeticOperators: false strictCalls: false switchConditionsMatchingType: false noVariableVariables: false strictArrayFilter: false
除了引入新的自定义规则外,phpstan-strict-rules 还可以更改 PHPStan 本身中存在的某些配置参数的默认值。这些参数在 phpstan.org 上有文档说明。[链接](https://phpstan.org/config-reference#stricter-analysis)
逐个启用规则
如果您不想一次性使用所有可用的严格规则,只想使用一个或两个,您也可以做到!
您可以使用以下命令禁用包含的 rules.neon
中的所有规则:
parameters: strictRules: allRules: false
然后,您可以使用配置参数逐个重新启用规则
parameters: strictRules: allRules: false booleansInConditions: true
即使将 strictRules.allRules
设置为 false
,此包的部分功能仍然有效。这是因为 phpstan-strict-rules 也更改了 PHPStan 本身中存在的某些配置参数的默认值。这些参数在 phpstan.org 上有文档说明。[链接](https://phpstan.org/config-reference#stricter-analysis)