PHP_Error とエラー処理

PEAR を利用しているとよく

$res = $conn->query(“SELECT no_such_field FROM a_table”);
if(PEAR::isError($res)){ // DB::isError($res) も同じ
   die($res->getMessage()); // エラー表示して終了
}

という表記をしますが、全ての PEAR パッケージについて統一的にエラー処理したい場合は PEAR::setErrorHandling() というメソッドが有用です。
 
たとえば、次のコードは上のものと同様の結果になります。

// PEAR_ERROR_DIE: PEAR_Error がインスタンス化されたら getMessage() を出力して終了するようにする。
PEAR::setErrorHandling(PEAR_ERROR_DIE);
// あとは普通に実行
$res = $conn->query(“SELECT no_such_field FROM a_table”);
// ※ここでエラー処理は不要!

 
詳細なエラー処理を行いたい場合は PEAR_ERROR_CALLBACK を利用します。

// 例1:
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, “var_dump”);
// エラー発生時に
// if(PEAR::isError($res)){ var_dump($res); }
// とするのと等価
 
// 例2:
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, “error_exit”);
function error_exit($pear_err){
  die($pear_err->getMessage().”:”.$pear_getDebugInfo());
}
// エラー発生時にユーザ定義関数 error_exit を呼び出すのと等価

 
static に呼ばずインスタンスメソッドとして setErrroHandling をコールした場合、そのインスタンスについてのみ、ハンドリングします。
 
参考:
PEAR 基底クラス – はじめに