php中的未知异常错误

nev*_*ame 0 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();
Run Code Online (Sandbox Code Playgroud)

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

Fatal error: Exception thrown without a stack frame in Unknown on line 0
Run Code Online (Sandbox Code Playgroud)

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

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

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

set_exception_handler('myException');

$contact = new Contact();
$contact->email = 'peter';
$contact->save();
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题?

谢谢

Pek*_*ica 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)
    }

 }
Run Code Online (Sandbox Code Playgroud)

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