PhpStorm:在满足前提条件时如何处理未处理的异常

bla*_*lar 11 php phpstorm

我非常喜欢PhpStorm检测工具.他们帮助我编写更好的代码.现在我有以下情况,我问自己处理这种情况的最佳方法是什么.

我有一个带有一些前置条件的函数f,例如在下面的代码中:

/**
 * @param int $x
 * @throws PreconditionException x is negative
 */
 public function f(int $x): int
 {
   if ($x < 0) {
     throw new PreconditionException("the input x is negative");
   }
 }
Run Code Online (Sandbox Code Playgroud)

然后我在某个地方使用这个函数让我们说以下内容:

f(5);
Run Code Online (Sandbox Code Playgroud)

现在,PhpStorm以"未处理的异常"警告我.但在这种情况下,我知道不会抛出异常,所以添加一个try块并不是真的有意义.我应该简单地忽略这个警告,或者最好的方法是什么?

pa3*_*aka 9

从 phpStorm 2018.1 版开始,您可以从分析中排除任何异常。转到preferences->Languages & Frameworks->PHP并打开Analysis选项卡。

在此处输入图片说明

您可以在此处添加例外Unchecked Exceptions列表


Ork*_*nov 8

@noinspection标签可用于指示 PhpStorm 取消检查。标签可以用在行上方、方法上方或文件上方<?php单词之后:

/** @noinspection PhpDocMissingThrowsInspection */
/**
 *
 * Cancels order.
 *
 * @return bool
 */
public static function cancel()
{
    if (!self::inProgress()) return false;
    /** @noinspection PhpUnhandledExceptionInspection*/
    static::current()->delete();
    return true;
}
Run Code Online (Sandbox Code Playgroud)

检查列表可以在这个要点中找到:https : //gist.github.com/discordier/ed4b9cba14652e7212f5


您也可以通过界面禁用它。ALT+ENTER然后向右箭头和Suppress ...

  • 这可行,但是:您需要两个“@noinspection”标签,并且这些标签特定于 PhpStorm。如果有一个 phpdoc 标签就更好了。 (2认同)

Fan*_*a36 7

正确的方法是@throws在文档中添加标签(PhpStorm 手册)。例如:

    /**
     * @param $userId
     * @return array|null
     * @throws \Exception   <---------------------------
     */
    public static function send($userId)
    {
        if (empty($userId)) {
            throw new \Exception("User ID is missing", 1);
        }
        // ...
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

对我有帮助的是@throws设置Null

例子:

    /**
     * @return SomeObject
     * @throws Null
     *
     */
Run Code Online (Sandbox Code Playgroud)