基底クラス PEARの例外処理 その2 [PEAR_Error]

メモ:  Category:pear

基底クラス PEAR の関数に raiseError という関数があります。この関数で返される PEAR_Error クラスを読んでみます。

このクラスは、ほとんどの仕事をコンストラクタで行っています。

コンストラクタでは、メッセージやコード、ユーザ情報をメンバ変数に格納します。

//PEAR_Errorクラスのコンストラクタ(抜粋)
function PEAR_Error($message = 'unknown error', $code = null,
                    $mode = null, $options = null, $userinfo = null)
{
    //....
    $this->message   = $message;
    $this->code      = $code;
    $this->mode      = $mode;
    $this->userinfo  = $userinfo;
    //....
}

あとコンストラクタで行っているのが$modeの指定による動作の設定です。

例えば、$modeに PEAR_ERROR_CALLBACK が指定された場合、コールバック関数が呼ばれます。

$modeには、次のようなものがあります。

  • PEAR_ERROR_RETURN:オブジェクトを返す。
  • PEAR_ERROR_PRINT:コンストラクタ内のprintf関数でエラーメッセージを出力します。
  • PEAR_ERROR_TRIGGER:コンストラクタ内のtrigger_error()関数を使用します。
  • PEAR_ERROR_DIE:エラーメッセージを出力し、その時点で実行を終了します(die)。
  • PEAR_ERROR_CALLBACK:エラー処理にコールバック関数を使用します。
  • PEAR_ERROR_EXCEPTION:Zend Engine 2 が存在する場合、PEAR_Errorオブジェクトを使って例外がスローされます。

もうひとつ目に付いたのが、 debug_backtrace(); 関数です。

//PEAR_Errorクラスのコンストラクタ(抜粋)
function PEAR_Error($message = 'unknown error', $code = null,
                    $mode = null, $options = null, $userinfo = null)
{
    //...
    if (function_exists("debug_backtrace")) {
        if (@!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) {
            $this->backtrace = debug_backtrace();
        }
    }
    //...
}

PEAR_Error クラスの getBacktrace メンバ関数により実行履歴が連想配列として取得できます。

bluenote by BBB