我如何声明函数终止以便 PhpStorm 检测到它?
How do I declare that a function dies so it is detected by PhpStorm?
背景
我使用几个辅助函数来停止程序流和 return 数据。例如,虽然大多数页面是 HTML,但我偶尔 return JSON 并调用
/**
* @param array|bool $response
*
* @die
*/
function jsonResponseDie($response)
{
header('Content-Type: application/json');
echo json_encode($response);
die();
}
问题
但是,调用函数没有检测到有 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';
}
问题
如何让 PhpStorm 检测到这个函数会死掉?
我确实尝试了一些项目“@return die”或“@die”,但这些似乎没有被识别。我还查看了一些文档 here,但没有发现任何有用的东西。
PHPDoc 中没有此类内容的特殊标签。 PhpStorm 还没有任何解决方案。
https://youtrack.jetbrains.com/issue/WI-10673 -- 观看这张票 (star/vote/comment) 以获得任何进展的通知。
更新 2020-10-20:
自 PhpStorm 2020.1.x 版本以来,上述票证 has been implemented 和此类功能现已可用。
它是使用高级元数据功能实现的(通过为IDE只眼睛创建单独的类似PHP的文件):https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html#define-exit-points
<?php
namespace PHPSTORM_META {
exitPoint(\App\PageFlow::exitApplication());
}
另一个例子:因此,带有 bar
参数的 terminate()
调用将充当退出点(另一个值不会触发此点)。因此,运行 方法的最后一行将被视为无法访问:
exitPoint(Application::terminate('bar'));
P.S. 来自 PhpStorm 2020.3(将于今年 12 月左右发布)并使用 PHP 语言级别 = 8.0 你将能够在您的代码中使用 PHP 8-style 属性 #[NoReturn]
而不是单独的高级元数据文件(参见 WI-55531 (actual/original implementation) and WI-56103 (new attribute name) 票)。
我有一个 CodeIgniter 3.1.11 项目,我想在我的 myproject/ci/application/helpers/format_helper.php
文件中的 SendJsonResponseAndDie()
方法上实现一个 exitPoint。
对我来说,解决方案很简单,就是在 myproject
中创建一个 meta
目录,然后创建一个包含以下内容的 .phpstorm.meta.php
文件:
myproject/meta/.phpstorm.meta.php:
<?php
namespace PHPSTORM_META {
function exitPoint($functionReference) {
return "exitPoint " . $functionReference;
}
exitPoint(\SendJsonResponseAndDie());
}
嘿,转眼间,每当我将鼠标悬停在项目中任何地方函数调用之后出现的代码上时,就会出现“无法访问的语句”文本。
不过,我希望无法到达的代码行会变暗,这样我就可以在视觉上被吸引到问题上,而不是需要我的悬停事件。
@LazyOne 的回答中未提及的一些额外阅读:https://github.com/JetBrains/phpstorm-stubs/blob/master/meta/.phpstorm.meta.php
背景
我使用几个辅助函数来停止程序流和 return 数据。例如,虽然大多数页面是 HTML,但我偶尔 return JSON 并调用
/**
* @param array|bool $response
*
* @die
*/
function jsonResponseDie($response)
{
header('Content-Type: application/json');
echo json_encode($response);
die();
}
问题
但是,调用函数没有检测到有 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';
}
问题
如何让 PhpStorm 检测到这个函数会死掉?
我确实尝试了一些项目“@return die”或“@die”,但这些似乎没有被识别。我还查看了一些文档 here,但没有发现任何有用的东西。
PHPDoc 中没有此类内容的特殊标签。 PhpStorm 还没有任何解决方案。
https://youtrack.jetbrains.com/issue/WI-10673 -- 观看这张票 (star/vote/comment) 以获得任何进展的通知。
更新 2020-10-20: 自 PhpStorm 2020.1.x 版本以来,上述票证 has been implemented 和此类功能现已可用。
它是使用高级元数据功能实现的(通过为IDE只眼睛创建单独的类似PHP的文件):https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html#define-exit-points
<?php
namespace PHPSTORM_META {
exitPoint(\App\PageFlow::exitApplication());
}
另一个例子:因此,带有 bar
参数的 terminate()
调用将充当退出点(另一个值不会触发此点)。因此,运行 方法的最后一行将被视为无法访问:
exitPoint(Application::terminate('bar'));
P.S. 来自 PhpStorm 2020.3(将于今年 12 月左右发布)并使用 PHP 语言级别 = 8.0 你将能够在您的代码中使用 PHP 8-style 属性 #[NoReturn]
而不是单独的高级元数据文件(参见 WI-55531 (actual/original implementation) and WI-56103 (new attribute name) 票)。
我有一个 CodeIgniter 3.1.11 项目,我想在我的 myproject/ci/application/helpers/format_helper.php
文件中的 SendJsonResponseAndDie()
方法上实现一个 exitPoint。
对我来说,解决方案很简单,就是在 myproject
中创建一个 meta
目录,然后创建一个包含以下内容的 .phpstorm.meta.php
文件:
myproject/meta/.phpstorm.meta.php:
<?php
namespace PHPSTORM_META {
function exitPoint($functionReference) {
return "exitPoint " . $functionReference;
}
exitPoint(\SendJsonResponseAndDie());
}
嘿,转眼间,每当我将鼠标悬停在项目中任何地方函数调用之后出现的代码上时,就会出现“无法访问的语句”文本。
不过,我希望无法到达的代码行会变暗,这样我就可以在视觉上被吸引到问题上,而不是需要我的悬停事件。
@LazyOne 的回答中未提及的一些额外阅读:https://github.com/JetBrains/phpstorm-stubs/blob/master/meta/.phpstorm.meta.php