如何让 PhpStorm 显示用 @method 声明的方法引发的异常(或从魔术方法 docblock 继承它们)?



假设以下示例代码:

/**
* @method bool someMethod()
*/
class MyClass
{
/**
* @throws MyClassException
*/
public function __call($method, $args)
{
if ($this->someCheck()) {
throw new MyClassException();
}
}
}
//...
try {
(new MyClass())->someMethod();
} catch (MyClassException $e) {  // Reported by PHPStorm as not thrown!
// of course the exception is properly caught
}

如何让 IDE 检测使用 docblock 声明的方法引发的异常@method?想知道这是否有可能做到,如果不是 - 我的替代方案是什么?

在这种情况下,似乎用魔法方法声明@throws完全被忽略了。当然,我可以禁用检查,但这对我来说不是干净的解决方案......

它说这是可能的一段时间(如果我正确阅读票证,一些 2018.1.x 版本(,但后来它在 2018.1.3 中回滚"由于可用性问题"。

我同意这一点 - 不是每个人都会乐于看到每个魔术方法调用的未处理异常警告(例如Laravel经常使用它( - 仅仅是因为不是每个魔术方法都可以抛出异常。

无论如何:https://youtrack.jetbrains.com/issue/WI-39284 - 观看此票(星号/投票/评论(以获取有关任何进度的通知。

2021 年更新

它似乎在最新的PhpStorm中不起作用。语法也已从 PSR 草稿中删除,因此这可能不再是一个可行的解决方案。

<小时 />

原答案

您可以通过以下方式记录魔术方法的异常:

/**
* MyClass summary.
* 
* @method bool someMethod() {
*     @throws MyClassException
* }
*/
class MyClass {
// ...
}

此语法是 PSR-5 草稿的一部分。标准仍然不被接受,但它似乎在PhpStorm中运行良好。

最新更新