我坐在一个包含几个类的大型代码库中,这些类通过神奇实现的方法(使用__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方法的降级严重性"选项来调整严重性,但我更愿意:
以上任何一种可能吗?如果是这样,怎么样?
额外的红利问题:考虑方法调用被链接的情况.
$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)