如何强制在 PHP 中捕获异常?
如果方法可能返回和异常并且未添加到 try catch 块,我想强制异常捕获。
例如:
如果没有抛出异常,开发人员可能永远不会知道他使用的方法可能会抛出某种异常。所以他不会抓住它。我想确保每个可以抛出的异常都会被捕获。
如果不是,我想要一个致命错误,或者至少是一个异常。
更新:在评论中指出,前一个答案不是问题的实际答案。PHP 解析器本身不支持检测 PHP 中未捕获的异常或潜在的未捕获异常。(不像 Java 编译器)。您必须使用外部工具进行静态代码分析,以提高代码质量。我发现了这个有趣的答案,例如:https ://stackoverflow.com/a/8268875/171318
原答案:
您可以使用 . 将函数注册为全局异常处理程序set_exception_handler()
。如果未捕获到异常,PHP 引擎将调用此函数。
示例(来自 PHP 手册):
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
exit(1);
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
考虑到这个问题,我决定分享我为自己所做的事情。
我将在我的应用程序中添加编译机制。因此,如果没有先编译,它将无法工作。
这将帮助我强制开发人员进行编码实践,并且不会减慢应用程序的速度。
=======================
抱歉,我找不到不减慢应用程序的方法。目前我想到的最好的事情是在包含文件时检查文件修改时间。如果它不等于编译时间,则抛出关于编译的异常。
但它毕竟会检查参与脚本运行的所有文件的日期和时间。因此,如果您在脚本执行中运行 1000 个文件,在我的电脑上它会减慢 0.022 秒。如果您的脚本运行中包含大约 50 个文件,则它会减慢 0.0015 秒
在大多数情况下,运行这种应用程序仍然比修复开发人员制造的错误更便宜。但这取决于您希望您的应用程序有多快。