3

假设以下示例代码:

/**
 * @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 检测由@methoddocblock 声明的方法引发的异常?想知道这是否有可能做到,如果没有的话——我的选择是什么?

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

4

2 回答 2

3

它说有一段时间是可能的(如果我没看错的话,有一些 2018.1.x 版本),但后来“由于可用性问题”在 2018.1.3 中回滚了。

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

无论如何:https ://youtrack.jetbrains.com/issue/WI-39284——观看这张票(明星/投票/评论)以获取任何进展的通知。

于 2018-06-27T18:33:00.750 回答
2

2021 年更新

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


原始答案

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

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

    // ...
}

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

于 2018-07-26T09:21:41.687 回答