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