对于神奇实现的方法,如何处理"类中未找到的方法"警告?

Jon*_*Jon 52 php phpstorm

我坐在一个包含几个类的大型代码库中,这些类通过神奇实现的方法(使用__call__callStatic)来公开功能.例如:

class Foo {
    public function __call($name, $parameters) {
        echo "You called $name().\n";
    }
}

$f = new Foo;
$f->test();   // runs fine, but PhpStorm flags as a warning
Run Code Online (Sandbox Code Playgroud)

问题是PhpStorm认为该test()方法不存在,因此它在呼叫站点发出警告.这有点烦人,因为代码当然会运行并按预期运行.

我已经通过检查"如果类中存在__magic方法的降级严重性"选项来调整严重性,但我更愿意:

  1. 仅对特定类完全禁用此功能,或
  2. 使用IDE而不是反对它 - 提供我已有的信息,以便我们的观点达成一致

以上任何一种可能吗?如果是这样,怎么样?

额外的红利问题:考虑方法调用被链接的情况.

$f = new Foo;
$f->test()->chain()->moreChain();   // potentially runs fine
Run Code Online (Sandbox Code Playgroud)

假设魔术调用$f->test()返回适当的后续(可能,但不一定,也是魔术)调用将正常工作.但是,由于我无法告诉IDE test()返回什么,因此将其余的调用链标记为缺少方法.更糟糕的是,"降级严重性"设置不适用于这些警告,因为IDE不知道这些中间对象应该是什么类.

有没有解决方案也可以涵盖这种情况?

更新

尽管使用@method注释记录魔术方法似乎有效,但我必须假设这种方法目前存在一些问题,因为我只需要花一点时间来解决这些相关的错误:

我希望他们能在合理的时间内解决这些问题.

Mad*_*iha 44

那么,你可以进入首选项菜单,在Inspections下,转到Undefined - > Undefined Method并检查降级严重性,如果存在__magic方法.

这会使旗帜不那么严重(而不是警告,作为信息),这仍然会让你对你的文件检查开绿灯.

没有别的,我知道除了有@property@methodPHPDoc的符号目标类每一个是可能被使用的方法.

在此输入图像描述


Ric*_*ing 31

不是通过降低检查的严重性来全局关闭检查,而是可以向单行添加注释以忽略该特定检查.

    /** @noinspection PhpUndefinedMethodInspection */
    Assertion::NullOrAssertionDoesNotExist();
Run Code Online (Sandbox Code Playgroud)

  • 这个选项看起来很奇怪。当这仅用于禁用 phpStorm 中的检查时,为什么要使用这种 phpdoc 污染您的项目。假设您的同事使用*咳嗽* Aptana,这些评论对他们来说甚至没有意义。摆脱这些“魔法字段”的最佳方法是添加 phpdoc 和它们的属性定义 (2认同)