PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

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構文と組み合わせることで、エラー発生時の挙動を柔軟に制御できる
  1. 【PHP】set_exception_handler()関数の使い方とサンプルコードを解説

    set_exception_handler()関数とは set_exception_handler()関数は、例外を処理するためのユーザー定義関数を、デフォルトの例外ハンドラとして設定します。try/catchブロック内で例外が捕捉されなかった場合に備えて、あらかじめグローバルな例外ハンドラを登録しておくことができます。 キャッチされない例外が発生すると、ここで設定した例外ハンドラが呼び出され、その後スクリプトの実行は停止します。 構文 set_exception_handler(exception_handler) パラメータ exception_handler − キャッチさ

  2. PHPのrestore_exception_handler()関数とは?使い方と実行例を解説

    PHPのrestore_exception_handler()関数は、直前に設定されていた例外ハンドラを復元するための関数です。set_exception_handler()を使って例外ハンドラ関数を変更した後、この関数を呼び出すことで、以前の例外ハンドラ(組み込みのハンドラまたはユーザー定義関数)に戻すことができます。例外ハンドラはスタックのように管理されているため、set_exception_handler()を複数回呼び出した場合、restore_exception_handler()を実行するたびに、一つ前のハンドラへと順番に戻っていきます。構文restore_exception_ha