从 PHP 异常 __destruct() 方法发送错误报告是好主意还是坏主意?

2024-02-02

我正在为我的应用程序设计一个错误处理系统。 我想将其基于异常,并且我希望通过电子邮件收到有关我没有预料到的每个异常的通知。

我想到了一个类:

class My_Exception extends Exception {

    private $sendErrorReport = true;

    public function __destruct() {
        if ($this->sendErrorReport) {
              // send the error report by email
        }            
    }

    public function cancelErrorReport() {
        $this->sendErrorReport = false;
    }

} 

我想做这样的事情:

try { 
   do_something_that_can_throw_exception();
catch (My_Exception $e) {
   if ($e->getCode() == I_KNOW_WHAT_TO_DO ) {
        react_to_exception();
        $e->cancelErrorReport();   
   } else {
        show_error_message($e->getMessage());
   }
}

所以,基本上,当异常发生时,系统知道该怎么做,作为开发人员,它不会打扰我。但是当系统无法处理某些事情时,我就会收到通知。 我不想将通知我的代码放在 catch 子句中,因为我确信我会忘记它......

我可以确定异常 __destuct 方法会被调用吗?

异常的__destruct方法是实现这个目标的好方法吗?

我有更好的方法可以实现这一目标吗?


不,这不是一个好主意。

最好的选择是替换未处理的异常处理程序。看set_exception_handler. http://php.net/set_exception_handler如果您捕获异常,然后改变主意并希望将异常留给异常处理程序(就像您在示例中分析错误代码时所做的那样),您始终可以重新抛出异常。当然,更好的选择是对异常进行子类化,而不是依赖错误代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 PHP 异常 __destruct() 方法发送错误报告是好主意还是坏主意? 的相关文章

随机推荐