php中的未知异常错误

时间:2010-05-09 06:50:31

标签: php

我想捕获脚本中抛出的所有异常,然后检查它们是否有错误代码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();

我怎么能解决这个问题?

感谢

2 个答案:

答案 0 :(得分:5)

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

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

你不能在其中抛出新的异常 - 它会导致无限循环。

处理异常的常规方法是使用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)
    }

 }

我知道这看起来比你做的方式更麻烦。这就是我不喜欢异常的原因。

答案 1 :(得分:1)

我不确定但是试试这段代码

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();