在 ShipMonk,我们一直追求极致的代码质量。虽然 PHPStan 已经非常强大,但我们仍然发现一些潜在的问题无法被标准规则捕捉到。为了解决这个问题,我们开发了一套自己的 PHPStan 规则,并将其开源,希望能够帮助更多的开发者。
ShipMonk PHPStan Rules 提供了大约 40 个额外的规则,涵盖了各种常见的编码错误和不良实践。例如,它可以帮助你:
- 禁止比较不可比较的类型,避免意外的对象比较。
- 强制使用 match 语句处理枚举,确保所有枚举值都被正确处理。
- 禁止在可调用对象中抛出检查型异常,避免潜在的异常处理问题。
- 强制在返回迭代器时指定 $preserve_keys 参数,避免数据丢失。
- 禁止在未声明为整数的变量上使用自增/自减运算符,避免类型错误。
- 等等…
安装
使用 composer 安装 ShipMonk PHPStan Rules 非常简单:
composer require --dev shipmonk/phpstan-rules
然后,你需要将 rules.neon 文件包含到你的 PHPStan 配置文件中:
立即学习“PHP免费学习笔记(深入)”;
# phpstan.neon includes: - vendor/shipmonk/phpstan-rules/rules.neon
配置
你可以根据自己的需求,轻松地禁用或重新配置任何规则。例如,要禁用 enforceReadonlyPublicProperty 规则,可以这样配置:
parameters: shipmonkRules: enforceReadonlyPublicProperty: enabled: false
或者,你可以禁用所有规则,然后只启用你需要的规则:
parameters: shipmonkRules: enableAllRules: false allowComparingOnlyComparableTypes: enabled: true
示例:allowComparingOnlyComparableTypes 规则
这个规则禁止使用比较运算符(>, =, )比较 int|string|float|DateTimeInterface 以外的类型,或者包含可比较类型的相同大小的元组。它主要针对意外的对象、枚举或数组比较,这些比较在 PHP 中是有效的,但往往会产生意想不到的结果。
function example1(Money $fee1, Money $fee2) { if ($fee1 > $fee2) {} // 比较对象是被禁止的 } new DateTime() > '2040-01-02'; // 比较不同类型是被禁止的 200 > '1e2'; // 比较不同类型是被禁止的
优势与实际应用
ShipMonk PHPStan Rules 的主要优势在于:
- 提高代码质量: 通过更严格的类型检查和代码规范,减少潜在的错误。
- 减少运行时错误: 在开发阶段发现并修复错误,避免在生产环境中出现问题。
- 提高开发效率: 通过自动化代码审查,减少手动检查的时间。
- 促进代码一致性: 强制执行统一的代码风格,提高代码可读性和可维护性。
在实际应用中,ShipMonk PHPStan Rules 可以帮助你构建更健壮、更可靠的 PHP 应用程序。它可以应用于各种类型的项目,无论是小型个人项目还是大型企业级应用。通过持续集成和自动化代码审查,可以确保代码质量始终保持在高水平。
总而言之,ShipMonk PHPStan Rules 是一套非常有价值的 PHPStan 规则,可以帮助你显著提升代码质量,减少运行时错误,并提高开发效率。如果你追求卓越的代码质量,那么 ShipMonk PHPStan Rules 绝对值得一试。