0

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

有人对此有什么好主意吗?

4

1 回答 1

2

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

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

于 2012-10-18T19:23:03.853 回答