#11 PHPで学ぶエラーハンドリングの基本
PHPのエラーハンドリングは、比較的新しいバージョンで整備された、`try`・`catch`という仕組みが基本です。この記事では、PHPにおけるエラーハンドリングの基本を解説します。
try・catchの基本
try {
if ($b === 0) {
throw new Exception("0では割れません");
}
} catch (Exception $e) {
echo $e->getMessage();
}
`throw`で例外を発生させ、`catch`でそれを受け取ります。`$e->getMessage()`で例外に添えたメッセージを取得できます。
複数の例外の種類を使い分ける
PHPには`Exception`のほかに、用途に応じた組み込みの例外クラスが用意されています。目的に合った種類を投げることで、呼び出し側がより適切に対処できます。
try {
if (!is_int($age)) {
throw new InvalidArgumentException("ageは整数である必要があります");
}
} catch (InvalidArgumentException $e) {
echo "入力エラー: " . $e->getMessage();
} catch (Exception $e) {
echo "その他のエラー: " . $e->getMessage();
}
複数の`catch`ブロックを並べることで、例外の種類ごとに異なる処理を書けます。より具体的な例外クラスを先に、`Exception`のような広い範囲を捕まえるものを後に書くのが基本です。
finallyという必ず実行される部分
try {
// 何らかの処理
} finally {
echo "処理が終わりました";
}
`finally`ブロックは、例外が発生してもしなくても必ず実行されます。ファイルを閉じる、接続を切断するといった後片付け処理を書くのに適しています。
独自の例外クラスを作る
アプリケーション固有のエラーを表現したい場合は、`Exception`を継承した独自クラスを作ることもできます。
class InsufficientBalanceException extends Exception {}
throw new InsufficientBalanceException("残高が不足しています");
PHPならではの注意点
PHPには、`try`・`catch`で捕まえられる「例外(Exception)」とは別に、古くからある「エラー」という仕組みも存在し、両者は歴史的な経緯から扱いが異なります。比較的新しいPHPでは、多くのエラーが例外として扱われるよう改善されていますが、使っているライブラリによっては古い方式のエラー処理が必要な場合もあります。`catch (Throwable $e)`のように書くと、`Exception`と(致命的な内部エラーを表す)`Error`の両方をまとめて捕まえられる点も覚えておくと安心です。
まとめ
PHPのエラーハンドリングは`try`・`catch`・`finally`が基本です。例外の種類ごとの使い分け、独自の例外クラス、「例外」と「エラー」という2つの仕組みの違いも、頭の片隅に置いておきましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
PHPをもっと学びたい方には「10日でおぼえるPHP入門教室 第4版」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿