6

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

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

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

有没有办法将 PHPStan 配置为忽略 RedBean(或任何其他类)的问题?或者忽略魔法方法可能导致的问题?

4

1 回答 1

8

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

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

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

于 2019-03-08T13:30:14.583 回答