【问题标题】:Trigger error from within exception handler从异常处理程序中触发错误
【发布时间】:2009-09-16 17:11:26
【问题描述】:

鉴于我已经有一个自定义的 PHP 错误处理程序,将异常处理程序定义为这样的“转发器”是否有意义:

function exception_handler(Exception $e) {
    trigger_error($e->getMessage(), E_USER_ERROR);
}
set_exception_handler('exception_handler');

这个想法是利用已经存在的错误处理程序来处理异常,以避免重复相同的代码。从异常处理程序内部触发错误会导致一些问题吗?

【问题讨论】:

    标签: php exception error-handling


    【解决方案1】:

    完全没有问题。我有相同的设置,我的错误处理程序通过电子邮件向我发送异常和错误。

    这是我的异常处理程序,我输入了我有一个未捕获的异常的错误。这样我就知道它是由异常而不是错误引起的。由于get_class,它也会告诉我异常。

    function exception_handler(Exception $e) {
      trigger_error('Uncaught ' . get_class($e) . ', code: ' . $e->getCode() . "<br/>\n Message: " . htmlentities($e->getMessage()), E_USER_WARNING);
    }
    

    由于我的错误处理程序发送了一封 HTML 电子邮件,因此我在异常处理程序中有 html。您可能想要删除它。

    【讨论】:

      【解决方案2】:

      我以前在 PHP 代码中看到过错误和异常。虽然从技术上讲它不应该引起任何问题,但它可能会给维护代码的开发人员造成混乱。如果您有时间,请考虑重构所有 trigger_error 代码以改用异常。当然,您会遇到 PHP 本身正在创建的任何 trigger_error 内容,但希望您可以避免大多数情况。

      【讨论】:

      • 异常和错误是分开的。我同意您可以将任何 trigger_error 调用重构为异常,但这不会处理您无法删除的内置错误。像你说的。 :)
      • 啊,当然也可以这样(让错误处理程序抛出异常,而不是异常处理程序触发错误)。但我想知道哪种方式更可取,为什么?
      • 由于异常只采用一个参数,而错误采用多个参数,因此 OP 的方式会更容易。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2015-03-29
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多