PEAR_ErrorStackのコンストラクタを読んでみます。
function PEAR_ErrorStack($package, $msgCallback = false, $contextCallback = false, $throwPEAR_Error = false) { $this->_package = $package; $this->setMessageCallback($msgCallback); $this->setContextCallback($contextCallback); $this->_compat = $throwPEAR_Error; }
PEAR_ErrorStackのページでは、singletonでインスタンス化した際パッケージ名でその インスタンスが唯一であることが保証されていました。コンストラクタだけを見ると唯一 であるような管理がなされていないことがわかります。このことからもsingletonの役割が わかります。
次のようにsingleton()では、
$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]
で管理されているのがわかります。
function &singleton($package, $msgCallback = false, $contextCallback = false, $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack') { if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]; } //.....省略 $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] = new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error); return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]; }
次に、setMessageCallback()でコールバック関数を登録しています。引数にfalseが渡 されると、デフォルトでgetErrorMessage()メンバ関数がセットされます。
このgetErrorMessage()関数は、PEAR_ErrorStackのページで紹介したパラメータの 連想配列でエラーメッセージを置き換えています。
setContextCallback()もコールバック関数を登録しています。引数にfalseが渡され ると、デフォルトでgetFileLine()メンバ関数がセットされます。
このgetFileLine()関数では、pushでPEAR_ErrorStackに積まれるデータのcontextを 作成します。デフォルトでは、次のようなエラー情報が作成されます。
array( 'file' => file, //ファイル名 'line' => line, //行番号 'function' => function name, //関数 'class' => class name //クラス名 )
Copyright 1997-2010 BBB All rights reserved.