PEAR_ErrorStack

メモ:  Category:pear

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;
} 

bluenote by BBB