ch01 8章中 1章目

ch01 — try / catch の基本

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch01 — try / catch の基本」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch01 — try / catch の基本」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch01 — try / catch の基本」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

プログラムを書いていると、「ファイルが無い」「DB に繋がらない」「予期しない値が来た」など、正常ルートでは処理しきれない事態 が必ず発生する。素朴に書こうとすると、関数が false を返したり -1 を返したりして、呼び出し側で毎回その戻り値を if で見張る作りになる。これが何階層にも積み重なると、本来やりたい処理よりエラーチェックの方が多くなる。

PHP の 例外 (Exception) は、この問題を「正常ルートとエラールートを別の線路に分ける」ことで解決する仕組み。try ブロックの中で問題が起きると、その時点で残りの処理はスキップされ、対応する catch ブロックに 強制的にジャンプ する。呼び出し側の関数を何階層またいでも、途中の if 監視なしに一気に飛んでこれる。

PHP では基本となる例外型として Exception クラス が用意されていて、その下に RuntimeException / InvalidArgumentException などの標準例外がツリー状に並んでいる。この章ではまず try { ... } catch (Exception $e) { ... } の素朴な形を書いて、「例外を受け止めればプログラムは落ちずに続けられる」感覚を掴む。

学習目標

  • try { ... } catch (Exception $e) { ... } の構文を書ける
  • 例外が起きると try の残りはスキップされ、catch ブロックへ飛ぶ
  • 例外を 受け止めれば プログラムは落ちずに継続できる

ドリル

no 内容
01 throw new Exceptiontry / catch で受け止める

解説スライド 全 6 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. try / catch の基本

    Lesson 10 / Chapter 1

  2. エラーが出るとプログラムは落ちる

    <?php
    echo "前\n";
    throw new Exception("問題発生");
    echo "後\n";

    実行結果:

    前
    PHP Fatal error: Uncaught Exception: 問題発生
    • throw で例外が投げられた瞬間、プログラムは 停止
    • 「後」は永遠に出力されない
    • 何もしないと、ユーザーに不親切な画面になる
  3. try / catch で例外を受け止める

    <?php
    echo "前\n";
    try {
        throw new Exception("問題発生");
    } catch (Exception $e) {
        echo "受け止めた\n";
    }
    echo "後\n";

    実行結果:

    前
    受け止めた
    後
    • 例外が起きても、catch ブロックで処理が続く
    • プログラムは落ちない
  4. 「危ない処理」だけ try で囲む

    <?php
    try {
        // 失敗するかもしれない処理
        危ないことをする();
    } catch (Exception $e) {
        // 失敗したときの後始末
        エラー処理();
    }
    • try失敗する可能性のあるところだけ に絞る
    • 大きく囲みすぎると、どこで失敗したか分からなくなる
  5. try の残りはスキップされる

    <?php
    try {
        echo "A\n";
        throw new Exception();
        echo "B\n";   // ここは絶対に実行されない
    } catch (Exception $e) {
        echo "C\n";
    }
    echo "D\n";

    実行結果:

    A
    C
    D
    • 例外が起きた瞬間、その後の try 内コードは 全部スキップ
    • catch ブロックへジャンプ
  6. このチャプターでできるようになること

    try / catch の構文を書ける ✅ 例外が起きても catch で受け止めれば落ちない ✅ try で囲む範囲を絞れる ✅ 例外発生後は try の残りがスキップされると知っている

    → ドリルへ

1 / 6
📜 スライドを全部一気に読む(縦表示)

Lesson 10 / Chapter 1


エラーが出るとプログラムは落ちる

<?php
echo "前\n";
throw new Exception("問題発生");
echo "後\n";

実行結果:

前
PHP Fatal error: Uncaught Exception: 問題発生
  • throw で例外が投げられた瞬間、プログラムは 停止
  • 「後」は永遠に出力されない
  • 何もしないと、ユーザーに不親切な画面になる

try / catch で例外を受け止める

<?php
echo "前\n";
try {
    throw new Exception("問題発生");
} catch (Exception $e) {
    echo "受け止めた\n";
}
echo "後\n";

実行結果:

前
受け止めた
後
  • 例外が起きても、catch ブロックで処理が続く
  • プログラムは落ちない

「危ない処理」だけ try で囲む

<?php
try {
    // 失敗するかもしれない処理
    危ないことをする();
} catch (Exception $e) {
    // 失敗したときの後始末
    エラー処理();
}
  • try失敗する可能性のあるところだけ に絞る
  • 大きく囲みすぎると、どこで失敗したか分からなくなる

try の残りはスキップされる

<?php
try {
    echo "A\n";
    throw new Exception();
    echo "B\n";   // ここは絶対に実行されない
} catch (Exception $e) {
    echo "C\n";
}
echo "D\n";

実行結果:

A
C
D
  • 例外が起きた瞬間、その後の try 内コードは 全部スキップ
  • catch ブロックへジャンプ

このチャプターでできるようになること

try / catch の構文を書ける ✅ 例外が起きても catch で受け止めれば落ちない ✅ try で囲む範囲を絞れる ✅ 例外発生後は try の残りがスキップされると知っている

→ ドリルへ

この章で取り組む 演習問題の流れ (1ステップ)
  1. 01 ドリル 01 — try / catch で例外を受け止める README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — try / catch で例外を受け止める

問題

以下の順番に出力する PHP を書いてください。

  1. "前" を 1 行出力
  2. try の中で throw new Exception("問題発生") を呼ぶ
  3. catch (Exception $e) の中で "受け止めた" を 1 行出力
  4. try / catch の後で "後" を 1 行出力

期待される出力:

前
受け止めた
後

ヒント

  • try { throw new Exception("問題発生"); } catch (Exception $e) { ... }
  • 例外が起きても catch で受ければプログラムは止まらない

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(1問)

  1. ドリル 01 — try / catch で例外を受け止める

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます