基底クラス PEARの例外処理 [raiseError]

基底クラス PEARの関数にraiseErrorという関数があります。この関数を使って例外を 発生(例外オブジェクトを作成)させることが出来ます。

生成されるオブジェクトは、基本的にPEAR_ErrorオブジェクトになりますがPEAR_Error に類するメッセージを持たないカスタムオブジェクトを指定することも出来ます。

カスタムオブジェクトを指定するには、コンストラクタでそのクラスを指定します。

//PEARクラスのコンストラクタ
function PEAR($error_class = null)
{
    if ($error_class !== null) {
        $this->_error_class = $error_class;
    }
}

このカスタムオブジェクトの指定は、raiseErrorの引数によって切り分けられています。

function &raiseError($message = null,
                     $code = null,
                     $mode = null,
                     $options = null,
                     $userinfo = null,
                     $error_class = null,
                     $skipmsg = false)
{
    if ($error_class !== null) {
        $ec = $error_class;
    } elseif (isset($this) && isset($this->_error_class)) {
        $ec = $this->_error_class;
    } else {
        $ec = 'PEAR_Error';
    }
    if ($skipmsg) {
        $a = &new $ec($code, $mode, $options, $userinfo);
        return $a;
    } else {
        $a = &new $ec($message, $code, $mode, $options, $userinfo);
        return $a;
    }
}

ドキュメントにもあるのですが、$skipmsgとカスタムオブジェクトの指定を正しく指定 しないと動作しなさそうです。

まとめ

raiseErrorは、エラーオブジェクトを返し、$skipmsgをtrueに指定する場合、コンスト ラクタ又は$error_classパラメータにメッセージを取らないカスタムオブジェクトを指 定する必要がある。