如何强制捕获异常PHP


How to force catching exceptions PHP

如何在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个文件,在我的pc上它会减慢0.022秒,如果在你的脚本运行中包含大约50个文件,那么它会减慢0.0015秒

在大多数情况下,运行这类应用程序仍然比修复开发人员制造的错误更便宜。但这取决于你希望你的应用程序有多快