採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

try / catch の基本

テクノロジ系 / exception (try / catch / throw / Exception / カスタム例外)

try / catch の基本

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 の残りがスキップされると知っている

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

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

問題

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

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

期待される出力:

前
受け止めた
後

採点

php scripts/grade.php topics/exception/ch01-try-catch/drill/01-catch-error/

ヒント

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