コード例 … 「try catch」複数

PHP用語集

カテゴリー: 制御構造  閲覧数:1393 配信日:2010-05-22 10:16


「try catch」複数


「try」後の「catch」は複数設置可能
・最初の「catch」から順に、「投げられた例外オブジェクトのクラス名」と「引数に指定したクラス名」がマッチするかチェックしていく

「投げたクラス」もしくは「親クラス」はキャッチ可能
・最初にマッチした所の「キャッチ」ブロック処理が実行される
・catch記述の順番次第で、どこでcatchするかが変わってくる
    class Ex1 extends Exception{}
   class Ex2 extends Exception{}
   class Ex3 extends Ex1{}
   class Ex4 extends Ex2{}
   class NotEx{}
   
   for($i = 0; $i < 6; $i++){
       try{
           switch($i){
               case 0://①
                   echo "「親クラスException」の例外が投げられる<br>";
                   throw new Exception;
               case 1://③
                   echo "「子クラスEx1」の例外が投げられる<br>";
                   throw new Ex1;
               case 2://⑤
                   echo "「子クラスEx2」の例外が投げられる<br>";
                   throw new Ex2;
               case 3://⑦
                   echo "「孫クラスEx3」の例外が投げられる<br>";
                   throw new Ex3;
               case 4://⑨
                   echo "「孫クラスEx4」の例外が投げられる<br>";
                   throw new Ex4;
               //case 5://⑪
                 //  echo "- NotEx 例外が投げられました。<br>";
                 //  throw new NotEx;
           }
//※catch記述の順番次第で、どこでcatchするかは変わる
       }catch(Ex1 $e){//④同クラスでキャッチ ⑧親(親)クラスでキャッチ
           echo "Ex1で、例外をキャッチ<br>";
           echo get_class($e), " was caught.<br><br>";
       }catch(Exception $e){//②同クラスでキャッチ ⑥親(親)クラスでキャッチ ⑩親の親(親)クラスでキャッチ
           echo "「親クラスException」で、例外をキャッチ<br>";
           echo get_class($e), " was caught.<br><br>";
       }catch(Ex2 $e){
           echo "Ex2で、例外をキャッチ<br>";
           echo get_class($e), " was caught.<br><br>";
      // }catch(NotEx $e){//「Notクラス」は、「Exceptionクラス」と無関係なため、「例外」とみなされずに「ExFatal error:  Exceptions must be valid objects derived from the Exception base class」となる。
      //     echo "NotExで、例外をキャッチ<br>";
      //     echo get_class($e), " was caught.<br><br>";
       }
   }

・結果
「親クラスException」の例外が投げられる
「親クラスException」で、例外をキャッチ
Exception was caught.

「子クラスEx1」の例外が投げられる
Ex1で、例外をキャッチ
Ex1 was caught.

「子クラスEx2」の例外が投げられる
「親クラスException」で、例外をキャッチ
Ex2 was caught.

「孫クラスEx3」の例外が投げられる
Ex1で、例外をキャッチ
Ex3 was caught.

「孫クラスEx4」の例外が投げられる
「親クラスException」で、例外をキャッチ
Ex4 was caught.


週間人気ページランキング / 12-25 → 12-31
順位 ページタイトル抜粋 アクセス数
1 Notice(エラーメッセージ) カテゴリー 4
2 PHPにおけるメソッドのオーバーライドについて /「引数の数や型は、親クラスのメソッドと完全に一致していなければなりません。」とは具体的にどういう意味ですか? 3
2 PHPで定数を定義する方法は2種類ある / 配列定数の定義 3
2 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 3
3 「POSIX正規表現」と「PCRE正規表現」の違い 2
3 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 2
3 Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting | エラーメッセージ 2
3 http_build_query | URLs(関数) 2
3 or(||) | 演算子 2
3 No route found fo | エラーメッセージ 2
3 and | 演算子 2
4 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 1
4 curl で Cookie を使用する 1
4 文字列型(string) | 型 1
4 You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. | Twitter API(エラーメッセージ) 1
4 Catchable fatal error: Object of class DateTime could not be converted to string | Fatal error(エラーメッセージ) 1
4 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 1
4 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 1
4 Warning: strlen() expects parameter 1 to be string, array given in ○○.php on line △△ | Warning(エラーメッセージ) 1
4 ob紛らわしい関数()一覧 | 出力バッファリング制御(関数) 1
2026/1/1 1:01 更新
指定期間人気ページランキング / 2020-5-28 → 2025-12-31
順位 ページタイトル抜粋 アクセス数
1 PHP用語 6721
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 2556
3 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 2514
4 ブラウザを閉じたらセッションデータはどうなるの? | セッション 1710
5 【テスト投稿】テスト | 1133
6 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 1089
7 PHPで定数を定義する方法は2種類ある / 配列定数の定義 1064
8 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 910
9 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 880
10 コード例 … 「例外処理」はネストすることができる 869
11 curl で Cookie を使用する 863
12 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 862
13 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 750
14 定数 739
15 インターフェイス | クラスとオブジェクト 700
16 Fatal error: Uncaught HeadlessChromium\Exception\OperationTimedOut: Operation timed out (3sec) in | Fatal error(エラーメッセージ) 697
17 メンバー | クラスとオブジェクト 648
18 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 642
19 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column | Fatal error(エラーメッセージ) 611
20 Warning: strlen() expects parameter 1 to be string, array given in ○○.php on line △△ | Warning(エラーメッセージ) 609
2026/1/1 1:01 更新