PHPの例外処理入門:Exceptionクラスの基本とカスタム例外クラスの作り方
はじめに
PHPにおける Exception クラスは、Throwable インターフェースを実装したクラスであり、PHPに組み込まれた定義済み例外やユーザーが独自に定義する例外を含む、すべての例外クラスの基底クラスとなります。
Exceptionクラスには、Throwableインターフェースの実装として提供される final(オーバーライド不可)のメソッドが複数定義されています。一方で、__toString() メソッドのみはオーバーライドが可能で、例外オブジェクトの文字列表現を自由にカスタマイズできます。
Exceptionクラスの主なメソッド一覧
| final public function getMessage() | 例外のメッセージを取得する |
| final public function getCode() | 例外のコードを取得する |
| final public function getFile() | 例外が発生したソースファイル名を取得する |
| final public function getLine() | 例外が発生した行番号を取得する |
| final public function getTrace() | バックトレース(backtrace)の配列を取得する |
| final public function getPrevious() | 前に発生した例外を取得する |
| final public function getTraceAsString() | トレース情報を整形済みの文字列として取得する |
| public function __toString() | 表示用に整形された文字列を返す(オーバーライド可能) |
ユーザー定義の例外クラスでコンストラクタを再定義する場合は、parent::__construct() を必ず呼び出すようにしましょう。これにより、メッセージやコードなど、例外が保持すべきすべてのデータが正しく割り当てられます。
サンプルコード:カスタム例外クラスの定義
次のスクリプトでは、myException という名前のカスタム例外クラスを定義しています。変数 $num の値が 0 未満、または 100 より大きい場合に、この例外がスローされます。
catchブロック内では、Exceptionクラスから継承した getMessage() メソッドでエラーメッセージを取得し、getLine() メソッドで例外が発生した行番号を取得して表示しています。
<?php
class myException extends Exception{
function message(){
return "error : " . $this->getMessage() . " in line no " . $this->getLine();
}
}
$num=125;
try{
if ($num>100 || $num<0)
throw new myException("$num is invalid number");
else
echo "$num is a valid number";
}
catch (myException $m){
echo $m->message();
}
?>
実行結果
$num に 125 を代入して実行すると範囲外のためエラーメッセージが表示され、$num に 90 を代入して実行すると「有効な数値」である旨のメッセージが表示されます。
error : 125 is invalid number in line no 10
ポイントまとめ
- Exceptionクラスを継承することで、独自の例外クラスを簡単に作成できる
- getMessage() や getLine() などの便利なメソッドはそのまま利用可能
- コンストラクタをオーバーライドする場合は parent::__construct() の呼び出しを忘れない
- try〜catch構文と組み合わせることで、エラー発生時の挙動を柔軟に制御できる
-
【PHP】set_exception_handler()関数の使い方とサンプルコードを解説
set_exception_handler()関数とは set_exception_handler()関数は、例外を処理するためのユーザー定義関数を、デフォルトの例外ハンドラとして設定します。try/catchブロック内で例外が捕捉されなかった場合に備えて、あらかじめグローバルな例外ハンドラを登録しておくことができます。 キャッチされない例外が発生すると、ここで設定した例外ハンドラが呼び出され、その後スクリプトの実行は停止します。 構文 set_exception_handler(exception_handler) パラメータ exception_handler − キャッチさ
-
PHPのrestore_exception_handler()関数とは?使い方と実行例を解説
PHPのrestore_exception_handler()関数は、直前に設定されていた例外ハンドラを復元するための関数です。set_exception_handler()を使って例外ハンドラ関数を変更した後、この関数を呼び出すことで、以前の例外ハンドラ(組み込みのハンドラまたはユーザー定義関数)に戻すことができます。例外ハンドラはスタックのように管理されているため、set_exception_handler()を複数回呼び出した場合、restore_exception_handler()を実行するたびに、一つ前のハンドラへと順番に戻っていきます。構文restore_exception_ha