PHPを使った開発では、予期しないエラーを安全に処理する仕組みが必要です。
そのために使われるのが「例外処理(try-catch)」です。
この記事では、try-catch構文の基本から、例外を投げる(throwする)方法まで、初心者向けにわかりやすく解説します。
目次
そもそも「例外処理」とは?
通常のエラー処理(if文など)では想定外の状況に対応しきれないことがあります。
例外処理は「エラー発生時に処理の流れを変え、適切に対応する」ための仕組みです。
例外を使うと、エラーが起きた時に「try-catchブロック」に処理が移り、エラーを補足して安全に処理を続行できます。
try-catch の基本構文
try {
// エラーが発生する可能性のある処理
$result = divide(10, 0);
echo '結果: ' . $result;
} catch (Exception $e) {
// エラーが発生した場合の処理
echo 'エラーが発生しました: ' . $e->getMessage();
}
- try ブロック:通常処理を記述。ここでエラーが発生するとcatchに移る。
- catch ブロック:例外が発生した場合の処理を記述。
例外を投げる(throw)
自分でエラーを検知した場合に例外を投げたい場合は throw
を使います。
function divide($a, $b) {
if ($b === 0) {
throw new Exception('0で割ることはできません');
}
return $a / $b;
}
この関数では、$bが0のときに Exception
を投げます。呼び出し元でtry-catchを使うことで安全に扱えます。
Exceptionクラスについて
PHPの例外は Exception
クラスのインスタンスとして扱われます。
catchではこのExceptionオブジェクトを $e
などの変数で受け取り、$e->getMessage()
でエラーメッセージを取得できます。
例:
catch (Exception $e) {
echo 'エラー詳細: ' . $e->getMessage();
}
Exceptionクラスの便利なメソッド
PHPのExceptionクラスには、例外発生時に役立つさまざまなメソッドが用意されています。例外処理を行う際は、これらを活用して詳細情報を取得するのがおすすめです。
- getMessage()
例外のメッセージを取得します。例外発生の原因をユーザーやログに伝えるのに便利です。 - getCode()
例外に設定されたコード(整数)を取得します。独自の例外コードを利用して、処理を分岐させることもできます。 - getFile()
例外が発生したファイルのパスを取得します。エラー箇所の特定に役立ちます。 - getLine()
例外が発生した行番号を取得します。ファイルと合わせてデバッグに有用です。 - getTrace()
スタックトレースを配列で取得します。どの処理を辿って例外に至ったか確認できます。 - getTraceAsString()
スタックトレースを文字列として取得します。ログ出力やメール通知に便利です。 - getPrevious()
ネストした例外を取得できます。複数の例外を連鎖的に処理する場合に使います。 - __toString()
Exceptionオブジェクトを文字列として出力する際に呼ばれます。エラーログにまとめて出力したい場合などに便利です。
例:getMessageとgetTraceAsStringを使った詳細なエラーログ
try {
throw new Exception("予期しないエラーが発生しました", 1001);
} catch (Exception $e) {
error_log("例外メッセージ: " . $e->getMessage());
error_log("ファイル: " . $e->getFile() . ' 行: ' . $e->getLine());
error_log("トレース:\n" . $e->getTraceAsString());
}
これらのメソッドを活用することで、例外発生時の原因調査やユーザー向けメッセージの表示をより適切に行えます。
独自の例外クラスを作る
PHPではExceptionを継承して独自の例外クラスを作成できます。用途別に例外を作るとエラーハンドリングがしやすくなります。
class MyCustomException extends Exception {}
try {
throw new MyCustomException('独自の例外が発生しました');
} catch (MyCustomException $e) {
echo 'カスタム例外: ' . $e->getMessage();
}
複数のcatchを使う
複数のcatchを用意することで、例外の種類に応じて処理を変えられます。
try {
// 処理
} catch (MyCustomException $e) {
echo 'カスタム例外: ' . $e->getMessage();
} catch (Exception $e) {
echo 'その他の例外: ' . $e->getMessage();
}
まとめ
- try-catchはエラー処理の基本。コードを安全に保つために必須。
- throwで意図的に例外を発生させられる。
- Exceptionクラスを使えばエラーメッセージや種類を柔軟に管理できる。
try-catchを使いこなして、安全なコードを書けるようになりましょう!