《PHP8上級試験対策》try〜catch〜finallyの実行順序を完全理解する

  • URLをコピーしました!

はじめに

例外処理の流れを正確に理解することは、PHP8上級試験において頻出のテーマです。特に「finally ブロックがどのタイミングで実行されるか」を明確に説明できるようになると、応用問題にも対応できるようになります。

キーワード: try / catch / finally / 例外処理 / 実行順序 / Exceptionクラス

目次

🧩 コード例

<?php
declare(strict_types=1);
error_reporting(-1);

try {
    throw new Exception("any exception");
} catch (Exception $e) {
    echo "Exception thrown!! \n";
    echo $e->getMessage(), "\n";
} finally {
    echo "fin. \n";
}

🧾 実行結果

Exception thrown!! 
any exception
fin. 

🧠 解説:処理の流れを理解する

PHPでは、try〜catch〜finally の処理フローは次のように進みます。

tryブロックの中で例外発生
        ↓
catchブロックで例外をキャッチして処理
        ↓
finallyブロックを必ず実行(例外の有無に関係なく)

🪄 ASCIIアート図解で理解!

┌────────────────┐
│  tryブロック開始 │
│  ──────────────│
│  throw発生!!    │──┐
└────────────────┘   │
                     ▼
           ┌────────────────┐
           │  catchブロック  │
           │  例外を処理して  │
           │  メッセージ出力  │
           └────────────────┘
                     ▼
           ┌────────────────┐
           │ finallyブロック │
           │ 例外があっても   │
           │   実行される!   │
           └────────────────┘

🧩 finallyブロックの特徴

状況finallyの実行有無
例外が発生しない✅ 実行される
例外が発生してcatchで処理された✅ 実行される
catchが無くても例外発生✅ finally実行後に致命的エラー
try内でreturnがあっても✅ finallyは実行される

つまり「finally は必ず通る」と覚えておくのが試験的にも安全です。

💡 試験対策ポイント

  • finallyブロックは「後処理専用」(例:ファイルクローズ、DB接続解除など)
  • catchの有無に関わらず必ず実行される
  • 例外が再スローされる場合でも finally は通る
  • 出力順序問題が出やすいので、「try→catch→finally」の順を明確に覚えておく!

✅ まとめ

ブロック内容実行される条件
try例外が発生する可能性のある処理常に実行
catch例外を捕捉して処理する該当する例外発生時
finally後処理(必ず通る)常に実行

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次