我有一个自定义异常类,它扩展了Exception,并增加了传递更多数据的能力。现在的问题是,如果我想捕获我的自定义异常和标准异常,但使用相同的代码块处理它们,我不知道除了创建一个新函数之外怎么做(我不想这样做)为每个我想使用它的地方做。)
try {
} catch(QM\DebugInfoException $e) {
// I don't want to duplicate the Exception handling code up here
}catch(Exception $e){
$db->rollBack();
$return['error'] = 1;
$return['errInfo'] = array(
'code' => $e->getCode(),
'message' => $e->getMessage(),
'trace' => $e->getTraceAsString()
);
// I'd rather handle both here, and just add data on to $return['errInfo']
switch ($ExceptionType) {
case 'QM\DebugInfoException':
$return['errInfo']['extraInfo'] = $e->getExtraInfo();
break;
}
}
有没有人对此有任何好的想法?
答案 0 :(得分:2)
你可以做一个get_class($ e),然后返回表示异常对象的类名的字符串,然后用它在你的开关中进行比较。
另一种选择是放置一个封装公共功能的函数,并从每个异常块中调用它。这样,不在您的交换机中的新的意外异常仍然可以渗透。我非常喜欢明确地捕捉特定的异常。