如何为自定义异常和标准异常运行相同的代码?

时间:2012-10-18 19:19:43

标签: php exception-handling try-catch

我有一个自定义异常类,它扩展了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;
    }
}

有没有人对此有任何好的想法?

1 个答案:

答案 0 :(得分:2)

你可以做一个get_class($ e),然后返回表示异常对象的类名的字符串,然后用它在你的开关中进行比较。

另一种选择是放置一个封装公共功能的函数,并从每个异常块中调用它。这样,不在您的交换机中的新的意外异常仍然可以渗透。我非常喜欢明确地捕捉特定的异常。