概要
トピックの締めとして、例外を 入力検証 (バリデーション) に応用する実用パターンを扱う。フォーム入力・API パラメータ・関数引数――どんな入り口でも、「想定外の値はその場で弾く」ことで、後段のロジックを「もう変な値は来ない」前提で書ける。
具体的な書き方は ガード節 (guard clause) と呼ばれるスタイル。関数の冒頭で if ($age < 0 || $age > 150) { throw new InvalidArgumentException(...); } のように、不正値を 早期 throw で振り落とす。残りの処理は正常値だけが流れてくる前提になるので、ネストが減り、本来のロジックが読みやすくなる。
PHP では値の不正には InvalidArgumentException を投げる慣習がある (標準ライブラリも同様)。大きなアプリでは Symfony Validator / Laravel Validator などへ発展する。この章は「年齢 0-150」という最小例で、ガード節と例外の組み合わせを身体に通す。
学習目標
- 入力値のチェックで例外を投げる「検証パターン」を書ける
- 範囲外なら
InvalidArgumentExceptionを投げる慣習を知っている - 呼び出し元は
try / catchだけで OK / NG の分岐ができる
ドリル
| no | 内容 |
|---|---|
| 01 | 年齢が 0-150 の範囲外なら例外を投げる |
📝 演習: ドリル 01 — 年齢を検証して例外で弾く
問題
標準入力から整数 $age を 1 行読み込みます。
validateAge(int $age) という関数を定義してください。
$age < 0または$age > 150の場合、throw new InvalidArgumentException("age must be 0-150: $age")- それ以外は何もしない
main 部分では try / catch を使ってください。
tryでvalidateAge($age);を呼び、続けて"OK: $age"を出力catch (InvalidArgumentException $e)で"NG: " . $e->getMessage()を出力
入力例 (tests/input.txt)
200期待される出力 (tests/expected.txt)
NG: age must be 0-150: 200ヒント
function validateAge(int $age) { if ... throw new InvalidArgumentException(...); }try { validateAge($age); echo "OK: $age\n"; }catch (InvalidArgumentException $e) { echo "NG: " . $e->getMessage() . "\n"; }