假设以下示例代码:
/**
* @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检测用@method
docblock声明的方法引发的异常?想知道这是否有可能做到,如果没有-我有什么选择?
在这种情况下,似乎完全忽略了魔术方法中声明的@throws
。当然我可以禁用检查,但这对我来说不是一个干净的解决方案...
答案 0 :(得分:3)
它说有可能存在一段时间(如果我正确地阅读了票证,则可能是一些2018.1.x版本),但后来又在2018.1.3中回滚,“出于可用性方面的考虑”。
我同意-并不是每个人都会为每个魔术方法调用看到未处理的异常警告(例如Laravel经常使用该警告)-仅仅是因为并非每个魔术方法都可以抛出异常。
无论如何:https://youtrack.jetbrains.com/issue/WI-39284-观看这张票(星号/投票/评论)以获取任何进展通知。
答案 1 :(得分:1)
您可以通过以下方式记录魔术方法的异常:
/**
* MyClass summary.
*
* @method bool someMethod() {
* @throws MyClassException
* }
*/
class MyClass {
// ...
}
此语法是PSR-5 draft的一部分。标准仍未被接受,但在PhpStorm中似乎可以很好地工作。