PHPStan 1.0 发布,PHP 代码静态分析器

经过六年的开发,静态分析器 PHPStan 1.0 的第一个稳定版本发布了,它允许您在不执行 PHP 代码和使用单元测试的情况下查找 PHP 代码中的错误。 该项目代码是用 PHP 编写的,并根据 MIT 许可证分发。

该分析器提供 10 个级别的检查,其中每个后续级别都会扩展前一个级别的功能并提供更严格的检查:

  • 基本检查,定义未知的类、函数和方法($this)、未定义的变量以及传递错误数量的参数。
  • 使用 __call 和 __get 识别可能未定义的变量、未知的魔术方法和类属性。
  • 检测所有表达式中的未知方法,不限于通过 $this 的调用。 检查 PHPDocs。
  • 检查返回类型并将类型分配给属性。
  • “死”(从未被调用)代码的基本识别。 识别始终返回 false 的 instanceof 调用、从不触发的“else”块以及返回后的代码。
  • 检查传递给方法和函数的参数类型。
  • 关于缺少类型信息注释的警告。
  • 关于定义两种或多种类型集合的错误联合类型的警告。
  • 关于调用方法和访问类型为“nullable”的属性的警告。
  • 检查“混合”类型的使用。

    已发现的潜在问题的示例:

    • 在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

  • 添加评论