2016-06-25 6 views
-2

Exceptionクラスを2回拡張して、さまざまな種類の例外をキャッチしました。最初の例外がキャッチされると、別のエラーがないかどうかをチェックし、エラーがある場合は新しい例外を再度スローします。 問題は、2番目の例外を検出できないことです。catch内でスローされた例外をPHPがキャッチできません

class FIRST extends Exception {} 
class SECOND extends Exception {} 

try { 
    throw new FIRST("FIRST", 1); 
} catch(FIRST $e) { 
    //caught 

    if(sth) { 
     echo 'ok'; //printed 
     throw new SECOND("SECOND", 1); 
     echo 'ok'; //never printed 
    } 
} 

catch(SECOND $e) { 
    //not caught 
} 

catch(PDOException $e) { 
    //caught 
} 

finally { 
    // 
} 

答えて

2

catchブロックが唯一tryブロックからの例外をキャッチ。

try { 
    throw new FIRST("FIRST", 1); 
} catch(FIRST $e) { 
    //caught 

    try { 
     if(sth) { 
      echo 'ok'; //printed 
      throw new SECOND("SECOND", 1); 
      echo 'ok'; //never printed 
     } 
    } catch (SECOND $e) { 
     //caught 
    } 
} 

catch(SECOND $e) { 
    //not caught 
} 

catch(PDOException $e) { 
    //caught 
} 

finally { 
    // 
} 
+0

、これが唯一の方法です:

あなたが別のtry-catch構造で、内のコードをラップする必要がcatchブロックのいずれかからスローされた例外をキャッチする必要がある場合

?私はそれらをお互いに入れ子にしたくない。 –

+0

http://stackoverflow.com/questions/8439581/catching-multiple-exception-types-in-one-catch-block私は最初の答えのようにスムースをしたいです。 –

+1

catchブロック内から追加の例外をスローすると、他のcatchブロックにキャッチされません。それはちょうど 'try-catch'がどのように機能するかです。あなたがリンクした答えはその作業をしません。 – ShiraNai7

関連する問題