此翻译可能已过时。

分析器

一款面向 PHP 的静态分析引擎。它会构建整个项目的语义模型,然后遍历每个函数、方法和表达式,在代码运行之前捕获类型错误和逻辑上的不可能。

分析器与 linter 的对比

两个工具都用于发现问题,但它们工作在不同的层面。

linter 关注代码的形态:风格问题、不一致、代码异味。它不需要知道代码在运行时具体做什么。

分析器关注代码的含义。它跟踪每个变量在每个分支中的类型,知道一个类上每个方法实际返回什么,并跟随哪些异常会向外传播。它能捕获各种不可能的情形,例如在某个类型上调用根本不存在的方法、在需要 Order 处传入了 ?Order,或在已注解为绝不返回 null 的函数中返回 null

如果把代码比作一篇文章,linter 负责语法校对,而分析器负责事实核查。

分析器提供了什么

  • **类型推断。**即便类型提示不完整,分析器也能理解每个表达式的类型。它支持 Psalm 和 PHPStan 注解、泛型、条件类型以及流敏感的类型收窄。
  • **全程序级感知。**分析在整个项目范围内进行,因此跨文件的调用能暴露真实的签名不匹配。
  • **速度。**Rust 内核,并行化,几秒之内即可处理整个项目。
  • **启发式检查。**一组可配置的咨询性检查,关注那些算不上严格错误、但常常预示潜在 bug 的代码质量问题。

接下来读什么

↳ 编辑此页 →