我想捕获脚本中抛出的所有异常,然后检查它们是否有错误代码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();
我怎么能解决这个问题?
感谢
答案 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();