PEAR_ErrorStack
PEAR 1.3.1以降 に追加された PEAR_ErrorStack というエラー処理用クラスがあります。 これは、 Pear がインストールされていれば一緒に入っています。
マニュアルによると、このパッケージは次のような特徴があります。
- PEAR_Errorより動作が機敏
- エラーレベルが指定できる(notice/warning/error/exception)
- エラーに関連するデータがエラーメッセージとは別に保存される
- エラーの階層化 - 親エラーを指定可能
- エラーメッセージの動的な生成機能により、 同一のエラーオブジェクトに対して異なる エラーメッセージを 生成することが可能
- エラーメッセージの生成・エラーコンテキストの生成・ エラー処理機能において、洗練 されたコールバック機能が利用可能
PEAR_ErrorStack は、基本的に第一引数に指定した名前をキーにインスタンスを作成します。 作成したオブジェクトのエラースタックにエラー情報を積みエラーを処理する側はスタックからエラー情報を取得します。
PEAR_ErrorStackのインスタンスは、 $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] で管理されパッケージ名($package)で唯一であることが保証されています。
PEAR_ErrorStackの使い方
エラーを発生させる処理は、次のようになります。
<?php
define('MYPACKAGE_ERROR_DBERROR', 1);
class myobj{
var $_stack;
function myobj(){
$this->_stack = &PEAR_ErrorStack::singleton('MyPackage');
}
function exec(){
$this->_stack->push(MYPACKAGE_ERROR_DBERROR, 'error',
array('MySQL' => 'DBエラーメッセージ'
,'SQL' => 'エラー情報'),
'Error:DB %MySQL% : SQL Error:%SQL%');
}
}
エラーメッセージの%MySQL(キー)%や%SQL%は、デフォルトでパラメータの連想配列のキーから置換されるようになっています。(getErrorMessage()関数)
エラーを処理する方は、次のようになります。
$stack =& PEAR_ErrorStack::singleton('MyPackage');
$myobj = new myobj;
$myobj->exec();
if($stack->hasErrors()){
$err = $stack->pop();
var_dump($err);
exit;
}