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 行出力tryの中でthrow new Exception("問題発生")を呼ぶcatch (Exception $e)の中で"受け止めた"を 1 行出力try / catchの後で"後"を 1 行出力
期待される出力:
前 受け止めた 後
採点
php scripts/grade.php topics/exception/ch01-try-catch/drill/01-catch-error/
ヒント
try { throw new Exception("問題発生"); } catch (Exception $e) { ... }- 例外が起きても catch で受ければプログラムは止まらない