例外処理

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()とすることで取得が可能です。

例外処理とエラーハンドラの違い

観点 例外処理 エラーハンドラ
カバー範囲 特定の処理ブロック内のみカバー ファイル内なら場所は問わない
エラー内容 致命的なエラーにのみ対処可能 致命的でないエラーにも対処可能
処理の続行 例外発生時は当初の処理をスキップ エラー対処後、当初の処理を続行