我使用几个辅助函数来停止程序流并返回数据。例如,虽然大多数页面都是 HTML,但我偶尔会返回 JSON 并调用
/**
* @param array|bool $response
*
* @die
*/
function jsonResponseDie($response)
{
header('Content-Type: application/json');
echo json_encode($response);
die();
}
Run Code Online (Sandbox Code Playgroud)
但是,调用函数不会检测到是否存在 die 语句,并允许在其后出现代码而不发出警告。
function recievePush()
{
// Process a push request and respond with a json array.
jsonResponseDie(array('status' => TRUE));
echo 'This will never execute but PhpStorm doesn\'t know that';
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能让 PhpStorm 检测到这个函数会死掉?
我确实尝试了一些项目“@return die”或“@die”,但这些似乎没有被识别。我还在这里查看了一些文档,但没有发现任何有用的内容。
PHPDoc 中没有针对此类内容的特殊标签。PhpStorm 还没有任何解决方案。
https://youtrack.jetbrains.com/issue/WI-10673 - 观看此票证(星号/投票/评论)以获取有关任何进展的通知。
2020-10-20 更新: 上述票证已实施,自PhpStorm 2020.1.x版本起此类功能现已可用。
它是使用高级元数据功能实现的(通过仅为 IDE 创建单独的类似 PHP 的文件):https ://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html#define-exit-points
<?php
namespace PHPSTORM_META {
exitPoint(\App\PageFlow::exitApplication());
}
Run Code Online (Sandbox Code Playgroud)
另一个例子:因此,terminate()使用提供的参数进行的调用bar将充当退出点(另一个值不会触发此操作)。因此,run 方法的最后一行将被视为无法访问:
exitPoint(Application::terminate('bar'));
Run Code Online (Sandbox Code Playgroud)
PS从 PhpStorm 2020.3(将于今年 12 月左右发布)并使用 PHP 语言级别 = 8.0,您将能够在代码中使用PHP 8 样式属性, #[NoReturn]而不是单独的高级元数据文件(请参阅WI- 55531(实际/原始实现)和WI-56103(新属性名称)票证)。