如何注释PHP函数/方法,该函数/方法永远不会根据设计为PhpStorm返回控制

时间:2019-06-05 12:34:22

标签: php phpstorm

有时,必须/方便地引入永远不返回控制权的PHP函数或方法-也就是说,总是调用exit()或引发异常。例如。我们需要一些共享的代码,这些代码将给定的异常实例转换为其他类的异常实例,然后将其重新引发-但永远不会将控制权返回给调用者。

如何注释这些功能/方法,特别是对于PhpStorm?这不仅仅是@return void,它还应提示控件永不返回,因此IDE会正确警告调用后出现的无效代码。

/** @how-to-annotate-return? */
function outputAndExit($message) {
  echo $message . "\nExiting\n";
  exit();
}

/** @how-to-annotate-return? */
function convertException(\Exception $e) {
  throw $e instance \LogicException ? new \RuntimeException : $e;
}

// ... so that following code will generate dead code warning:
try {
 // some code which may throw exception
 $m = 'happy';
 outputAndExit($m);
 $m = 'sad'; // dead code!!!
} catch (\Exception $e) {
 convertException($e);
 logger('Error happened'); // dead code!!!
}

IDE应将注释行标记为“ //无效代码!!!”作为无效代码。

3 个答案:

答案 0 :(得分:3)

好消息! never 返回类型来自 PHP 8.1

这是一些示例代码:

public function redirectToHomePage() : never
{
    header('Location: /home');
    exit();
}

您可以了解更多from the RFC

答案 1 :(得分:1)

PHPDoc建议您在方法没有返回值时选择omit the @return或定义@return void

  

没有return值的函数和方法,此处可以省略@return标记,在这种情况下,意味着@return void。

对于死代码警告,我将其放入PHPDoc描述中。

示例:

/**
 * @param    string    $message
 *
 * @return   void                  Exits the run
 */
function outputAndExit($message) {
  // your code
}

答案 2 :(得分:0)

在PHP中不会返回错误,它们会被抛出。您可以使用@throws批注并指定异常类型。当您调用函数/方法时,PHPStorm会使您感到温暖,并且不会像在try / catch块中那样处理异常。

PHP 7.1引入了多个异常捕获,其中单个catch语句可用于处理多个异常。考虑以下代码片段:

try {
    // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
    // Code to handle the exception
} catch (\Exception $e) {
    // ...
}

如果函数/方法从不返回,则可以使用@return void批注。 phpStorm很好地处理了这个注释,如果以后您尝试使用函数的return,它将使您感到温暖。

除了注释外,使用PHP 7还可按以下方式转换返回值:

function mySuperFunction(): int {
    return 1;
}