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) を実行すると、例外オブジェクトのクラス名を表す文字列が返され、それを使用してスイッチで比較されます。

もう 1 つのオプションは、共通の機能をカプセル化する関数を配置し、それを各例外ブロックから呼び出すことです。そうすれば、スイッチにない新しい予期しない例外が浸透する可能性があります。私は、特定の例外を明示的にキャッチすることの大ファンです。

于 2012-10-18T19:23:03.853 に答える