目次
1. 本記事のポイント
- PHPにおける例外処理の基本構文
try-catch
の使い方を解説 Exception
クラスの使い方と独自例外の扱いについても紹介- 実務でのエラーハンドリング設計の注意点を含めて説明
2. PHPのtry-catch構文とは?
PHPのtry-catch
構文は、例外(Exception)を捕捉して処理するための構文です。
ファイル操作、外部API呼び出し、DB接続など、実行時に失敗の可能性がある処理に対して、安全にエラー処理を実装するために使います。
PHPでは、try
ブロック内で例外がスローされると、即座にcatch
ブロックへ制御が移ります。catch
ブロックでは、その例外オブジェクトを受け取り、ログ出力やユーザー向けエラーメッセージの表示などを行います。
また、throw
を使って任意のタイミングで例外を発生させることも可能です。
例外処理はPHP5以降で導入されたもので、現代的なPHPアプリケーションでは欠かせない設計要素のひとつです。
3. 詳細解説
基本的なtry-catchの構文
ファイルの読み込みに失敗した場合の例外処理を行うコード例です。
PHP
<?php
try {
// 存在しないファイルを開く
$contents = file_get_contents('not_exist.txt');
echo $contents;
} catch (Exception $e) {
// 例外が発生した場合の処理
echo 'エラーが発生しました: ' . $e->getMessage();
}
このコードでは、ファイルが存在しないとException
がスローされ、catch
ブロックで処理されます。
複数の例外タイプを処理する
異なる例外クラスごとに処理を分けたい場合は、複数のcatch
ブロックを使います。
PHP
<?php
try {
// 任意のロジック(例:DB接続)
throw new InvalidArgumentException("引数が不正です");
} catch (InvalidArgumentException $e) {
echo "引数エラー: " . $e->getMessage();
} catch (Exception $e) {
echo "その他のエラー: " . $e->getMessage();
}
このようにすることで、エラー種別ごとの適切な対応が可能になります。
独自の例外クラスを定義する
ドメイン固有のエラーを扱う場合は、独自の例外クラスを定義するのが一般的です。
PHP
<?php
// 独自例外クラスの定義
class CustomException extends Exception {}
try {
throw new CustomException("カスタム例外が発生しました");
} catch (CustomException $e) {
echo "カスタム処理: " . $e->getMessage();
} catch (Exception $e) {
echo "その他の処理: " . $e->getMessage();
}
独自クラスにより、エラー内容の意味づけやログ設計が明確になります。
4. よくあるミス・誤解・落とし穴
try-catch
を使っても、全てのエラーが例外になるわけではありません。file_get_contents()
のような関数は、エラー時に例外ではなく警告を発する場合もあるため、明示的なラッパーが必要です。- PHPの
Error
(致命的エラー)とException
は別物です。PHP7以降はThrowable
をcatchすることでどちらも捕捉可能ですが、対応バージョンに注意してください。 catch (Exception $e)
の中で例外を再スロー(throw $e
)することで、上位層で再処理可能ですが、例外を握りつぶしてしまうコードは避けるべきです。
5. まとめ
try-catch
構文は、実行時エラーを安全に処理するための基本構文Exception
や独自例外を活用することで、エラーロジックを明確化できる- 全てのエラーが例外になるわけではない点に注意し、必要に応じて補助的な対策も検討が必要