如何配置 PHPStan 以避免由特定 类 and/or 魔术方法引起的误报?

How to configure PHPStan to avoid false positives caused by specific classes and/or magic methods?

在项目中使用 PHP RedBean 时,PHPStan 报告了如下问题:

87     Access to an undefined property RedBeanPHP\OODBBean::$token.

发生这种情况是因为 RedBean 的 OODBBean class 使用魔法方法将 class 属性与数据库 table 列进行逻辑绑定。 AFAIK,RedBean 实现该功能的方式没有任何问题。

有没有办法配置 PHPStan 以忽略来自 RedBean(或任何其他 class)的问题?或者忽略魔术方法可能导致的问题?

根据您的确切需要,您有多种选择。对于魔法属性:

  1. 如果您的 class 可以动态包含任何 属性,类似于 stdClass,您可以将 class 名称放入 universalObjectCratesClasses 配置参数中。参见 README
  2. 如果您的 class 总是包含相同的魔法属性,您可以通过在 class.
  3. 上方添加 @property 注释来定义它们
  4. 您可以创建一个所谓的 class 反射扩展来描述静态分析器的 __get__set 方法逻辑。这是定义在每种情况下对象上将存在哪些确切属性的可靠方法。这通过避免漏报使 PHPStan 非常强大——它仍然会报告未定义的访问属性,即使是以一种神奇的方式。有关详细信息,请参阅 README

对于魔法方法,3. 中的同样内容适用 - 您可以编写一个扩展来描述 __call 中用于静态分析器的逻辑。有关详细信息,请参阅 README