经过六年的开发,静态分析器 PHPStan 1.0 的第一个稳定版本发布了,它允许您在不执行 PHP 代码和使用单元测试的情况下查找 PHP 代码中的错误。 该项目代码是用 PHP 编写的,并根据 MIT 许可证分发。
该分析器提供 10 个级别的检查,其中每个后续级别都会扩展前一个级别的功能并提供更严格的检查:
已发现的潜在问题的示例:
- 在instanceof、catch、typehints 和其他语言构造中使用的类的存在。
- 所调用的方法和函数的存在和可用性,以及传递的参数数量。
- 检查该方法返回的数据类型是否与返回表达式中定义的类型相同。
- 正在访问的属性的存在和可见性,并检查属性中使用的声明和实际数据类型。
- 字符串格式化块中传递给 sprintf/printf 调用的参数数量是正确的。
- 变量的存在考虑到由分支运算符和循环形成的块。
- 对不同类型和操作数的数据进行无用的类型转换(例如“(string) 'foo'”)和严格测试(“===”和“!==”)总是返回 false。
PHPStan 1.0 的主要创新:
- 已实现“9”检查级别,检查“混合”类型的使用,旨在组织函数接收不同类型的参数。 XNUMX级标识“混合”的不安全使用,例如将“混合”类型的值传递给另一种类型,调用“混合”类型的方法,以及访问其属性,因为它们可能不存在。
- 使用@phpstan-pure和@phpstan-impure注释控制相同函数调用的返回值是否相同。
- 使用 @throws 注释在 try-catch-finally 构造中进行类型分析。
- 识别已定义但未使用的内部(私有)属性、方法和常量。
- 将不兼容的回调传递给数组函数,例如 array_map 和 usort。
- 类型检查是否缺少类型提示注释。
- 使类型声明与 PHPDocs 兼容,允许在 PHPDocs 中使用错误消息中的类型。
来源: opennet.ru