try-catch-finally文
try { // 例外が発生するかもしれないコード } catch (例外クラス名 $変数名) { // 例外が発生した場合の処理 } finally { // 例外の発生有無にかかわらず、必ず実行する処理 }
throwによる例外
<?php try { // 現在の日付を取得 $now = new DateTime(); $my_date = new DateTime('3000-12-31'); // 指定された日付が未来の場合は例外をスロー if( $now < $my_date ) { throw new Exception('未来の日付は表示できません。'); } // 日付を表示 echo $my_date->format('Y-m-d') . '<br>'; } catch (Exception $e) { // 例外が発生した場合はメッセージを表示 echo '例外発生:' . $e->getMessage() . '<br>'; } finally { echo '日付の表示処理が終了しました。'; } ?>
例外発生:未来の日付は表示できません。
日付表示処理が終了しました。
$e
throw文で発生させた例外情報はcatchブロックの$eに格納されます。throw文で指定したメッセージは、$e->getMessage()とすることで取得が可能です。
例外処理とエラーハンドラの違い
観点 | 例外処理 | エラーハンドラ |
---|---|---|
カバー範囲 | 特定の処理ブロック内のみカバー | ファイル内なら場所は問わない |
エラー内容 | 致命的なエラーにのみ対処可能 | 致命的でないエラーにも対処可能 |
処理の続行 | 例外発生時は当初の処理をスキップ | エラー対処後、当初の処理を続行 |