【问题标题】:How to force catching exceptions PHP如何强制捕获异常 PHP
【发布时间】:2013-05-01 10:56:10
【问题描述】:

如何在 PHP 中强制捕获异常?

如果方法可能返回异常并且未添加到 try catch 块中,我想强制异常捕获。

例如:

如果没有抛出异常,开发人员可能永远不会知道他使用的方法可能会抛出某种异常。所以他不会抓住它。我想确保每一个可以抛出的异常都会被捕获。

如果不是,我想要一个致命错误,或者至少是一个异常。

【问题讨论】:

标签: php exception


【解决方案1】:

更新:在 cmets 中指出,前一个答案不是问题的实际答案。 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";
?>

【讨论】:

  • 这是不正确的。它不会强迫开发人员在他的代码中添加异常情况。我没有问如何捕获未捕获的异常,我问的是如何强制捕获尚未抛出的异常
  • 请注意,这并非不正确。您是否搜索静态代码分析之类的内容?还是测试套件?
  • 类似的东西,我会尝试编辑我的问题以使其更清楚。但是我想消除这种情况,当抛出异常但开发人员没有添加 try catch 块时。是的,我当然可以捕获所有未捕获的异常。但这并不强制开发人员编写更简洁的代码并将异常情况处理添加到他的代码中。如果我真的像你说的那样。没有人知道在代码的某些部分可能有异常,直到它被抛出,然后他才会开始分析问题。
  • 是的,这是类似的东西,但不适合我想要的东西。 PHPLint 是在线分析工具。开发人员可能永远不会去那里分析某些东西,他只是让它保持原样。后来导致严重的错误。我正在考虑向应用程序添加一些类似编译的机制。
  • adding some compilation alike mechanism to an application。快乐编码!我希望它不会破坏任何东西。将 PHPLint 用作 Web 服务(或本地安装)并在每次提交时强制检查代码怎么样?这将是你可以走的一条路。此外,高单元测试覆盖率是高质量代码的标志
【解决方案2】:

考虑到这个问题,我决定分享我为自己所做的事情。

我将在我的应用程序中添加编译机制。因此,如果没有先编译,它将无法工作。

这将帮助我强制开发人员进行编码实践,并且不会减慢应用程序的速度。

=======================

抱歉,我找不到不减慢应用程序的方法。目前我想到的最好的事情是在包含文件时检查文件修改时间。如果不等于编译时间,则抛出编译异常。

但它毕竟会检查参与脚本运行的所有文件的日期和时间。因此,如果您在脚本执行中运行 1000 个文件,在我的电脑上它会减慢 0.022 秒。如果您的脚本运行中包含大约 50 个文件,则它会减慢 0.0015 秒

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

【讨论】:

  • I will add compilation mechanism to my application你能解释一下吗?
  • 是的。当我找到一个好的解决方案时,我会解释。毕竟这有点棘手。
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 2014-05-11
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-16
相关资源
最近更新 更多