如何使PhpStorm显示由@method声明的方法抛出的异常(或从魔术方法docblock继承它们)?

时间:2018-06-27 17:51:05

标签: php phpstorm docblocks

假设以下示例代码:

/**
 * @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。当然我可以禁用检查,但这对我来说不是一个干净的解决方案...

2 个答案:

答案 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中似乎可以很好地工作。