有时,必须/方便地引入永远不返回控制权的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应将注释行标记为“ //无效代码!!!”作为无效代码。
答案 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;
}