【问题标题】:unknown exception error in phpphp中的未知异常错误
【发布时间】:2010-05-09 06:50:31
【问题描述】:

我想捕获脚本中抛出的所有异常,然后检查它们是否有错误代码 23000。

如果他们不这样做,我想重新抛出异常。

这是我的代码:

function myException($exception) {
    /*** If it is a Doctrine Connection Mysql Duplication Exception ***/
    if(get_class($exception) === 'Doctrine_Connection_Mysql_Exception' && $exception->getCode() === 23000) {
         echo "Duplicate entry";
    } else {
         throw $exception;
    }
}

set_exception_handler('myException');

$contact = new Contact();
$contact->email = 'peter';
$contact->save();

但我收到此错误消息,但我不知道这是什么意思:

Fatal error: Exception thrown without a stack frame in Unknown on line 0

如果没有错误代码 23000,我希望能够重新抛出原始错误消息。

即使我删除了检查错误代码,我仍然收到相同的消息:

function myException($exception) {
    throw $exception;
}

set_exception_handler('myException');

$contact = new Contact();
$contact->email = 'peter';
$contact->save();

我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: php


    【解决方案1】:

    不要为此使用异常处理程序。

    异常处理程序只是处理未捕获异常的“最后手段”。

    您不能在其中抛出新异常 - 这会导致无限循环。

    处理异常的常规方法是使用try... catch {} 块:

    try
     {
      $contact->save();
     }
    catch (Exception $exception)
     {
      if(get_class($exception) === 'Doctrine_Connection_Mysql_Exception' 
         && $exception->getCode() === 23000) {
             echo "Duplicate entry";
        } else {
             throw $exception; // throw it on if it's not a doctrine exception
                               // (if that's what you want)
        }
    
     }
    

    我知道这看起来比你这样做的方式更混乱。这就是为什么我不太喜欢例外。

    【讨论】:

      【解决方案2】:

      我不确定,但试试这个代码

      function myException($exception) {
          restore_exception_handler();
          throw $exception;
      }
      //you can set here another exception handler that will be restored.
      //or your exception will be thrown to standard handler
      //set_exception_handler('myException2');
      
      set_exception_handler('myException');
      
      $contact = new Contact();
      $contact->email = 'peter';
      $contact->save();
      

      【讨论】:

        猜你喜欢
        • 2014-01-15
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        相关资源
        最近更新 更多