假设以下示例代码:
/**
* @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中运行良好。