PHP 7のエラー処理:Throwableインターフェースと例外機構の徹底解説
はじめに
PHP 7より前のバージョンでは、PHPパーサーはさまざまな状況に応じてエラーを報告しており、それぞれのエラーにはあらかじめ定義された型が割り当てられていました。PHP 7ではこのエラー報告の仕組みが大きく変わりました。従来のようなエラー報告の代わりに、ほとんどのエラーが「Error例外」としてスローされるようになっています。
スローされたError例外が捕捉されないまま放置された場合、致命的なエラー(Fatal Error)として報告され、従来のエラーと同じように扱われます。PHPのエラークラス階層の頂点に位置するのがThrowableインターフェースです。ArithmeticError、AssertionError、CompileError、TypeErrorといった定義済みエラークラスは、すべてこのThrowableインターフェースを実装しています。さらに、PHP 7のExceptionクラスも同様にThrowableインターフェースを実装しています。
Throwableインターフェースとは
Throwableインターフェースは、throw文によってスローできるあらゆるオブジェクト(ErrorオブジェクトやExceptionオブジェクトを含む)の基底となる存在です。ただし、ユーザー定義クラスがThrowableインターフェースを直接実装することはできません。独自の例外クラスを宣言したい場合は、必ずExceptionクラスを継承(extends)する必要があります。
try・catch・throwによる例外処理の基本
PHPの例外処理は、次の3つの要素で構成されています。
- throw: 例外オブジェクトを発生させるためのキーワード
- catch: スローされた例外を受け取り、処理を行うブロック
- try: 例外が発生する可能性のあるコードを囲むブロック
以下は基本的な使い方のコード例です。
<?php
function divide($a, $b) {
if ($b === 0) {
throw new Exception('ゼロで除算することはできません');
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (Exception $e) {
echo 'エラー: ' . $e->getMessage();
} finally {
echo "\n" . '処理が完了しました';
}
?>複数のcatchブロックによる柔軟なハンドリング
1つのtryブロックに対して、1つ以上のcatchブロックを設置し、異なる型の例外を個別に捕捉することができます。tryブロック内で例外が発生しなかった場合、最後のcatchブロックの直後から通常どおり実行が続行されます。
一方、tryブロック内で例外がスローされた場合は、後続のステートメントは実行されず、PHPはスローされた例外の型に一致するcatchブロックを探します。もし一致するcatchブロックが定義されていなければ、PHPパーサーは「Fatal error: Uncaught Exception(捕捉されなかった例外)」というメッセージとともに致命的なエラーを報告します。
finallyブロックで確実な後処理を実現
catchブロックの後に、あるいはcatchブロックの代わりに、finallyブロックを記述することもできます。finallyブロック内のコードは、tryブロック内で例外が発生したかどうかにかかわらず、必ず実行されます。そのため、ファイルのクローズやデータベース接続の解放など、リソースの後始末処理に最適です。
まとめ
PHP 7では、エラーと例外がThrowableインターフェースによって統一され、より一貫性のあるエラーハンドリングが可能になりました。try・catch・finallyを適切に組み合わせて活用することで、堅牢でメンテナンスしやすいアプリケーションを構築できます。
-
PHPのerror_reporting()関数の使い方を徹底解説!エラーレベルの設定方法
PHPのerror_reporting()関数とはerror_reporting()関数は、PHPスクリプトでどのエラーを報告するかを指定するための関数です。実行時にerror_reportingディレクティブを設定し、スクリプトの実行期間中、指定したエラーレベルを適用します。PHPには多くのエラーレベルが存在しますが、この関数を使うことでスクリプトの実行時にレベルを動的に変更できます。また、levelパラメータを省略した場合は、現在のエラーレポートレベルを返し、指定した場合は変更前の(古い)エラーレポートレベルを返します。構文error_reporting(level)パラメータlevel
-
PHPのerror_get_last()関数とは?使い方と実行例をわかりやすく解説
error_get_last()関数は、PHPスクリプト内で最後に発生したエラーを連想配列として取得するための組み込み関数です。エラーログを出力せずに、プログラム側で直近のエラー内容を確認したい場合に便利な関数です。 取得できる連想配列のキー この関数が返す連想配列には、次の4つのキーが含まれています。 type — エラーの種類(型)を表す message — エラーメッセージの内容を表す file — エラーが発生したファイル名を表す line — エラーが発生した行番号を表す 構文(シンタックス) error_get_last() パラメータ この関数にはパラメータはありません。 戻