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

基底クラス 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メンバ関数により実行履歴が連想配列として取得できます。