2

PHPでジェネリッククラスを作成しようとしています。このクラスは、Webサービスを呼び出し、返されるXMLを解析し、JSONオブジェクトを返す方法を提供します。

CURLやJSONをサポートしていないサーバーで致命的なエラーが発生し、クラッシュするのではなく、JSONオブジェクトのエラーをクライアントに正常に返す方法を探しました。いくつか検索した後、ハンドラー関数を
呼び出して提供できることを示唆する記事を見つけました。ob_start("fatal_error_handler")

function fatal_error_handler($buffer) {
    if (ereg("(error</b>:)(.+)(<br)", $buffer, $regs) ) {
        $err = preg_replace("/<.*?>/","",$regs[2]);
        $buffer = json_encode(array("errorMessage" => "Fatal error occurred", "exceptionMessage" => $err));
    }
    return $buffer;
} 

ob_end_flushスクリプトの最後に呼び出します。
これはうまくいきましたが、今度はその機能をクラスに追加したいと思いました。次のコンストラクタとデストラクタを追加しようとしましたが、成功しました。

    function __construct() {
        ob_start("fatal_error_handler");
    }

    function __destruct() {
        ob_end_flush();
    }

しかし、ハンドラー関数をクラスに移動しようとすると、それをob_start()呼び出しに追加する方法がありませんでした。私は試してみましob_start("$this->fatal_error_handler")たが、ob_start("WebService::fatal_error_handler")(WebServiceが私のクラス名です)-無駄になりました。

私の質問は、クラス関数の名前をob_startコンストラクターに含めるにはどうすればよいですか?

ボーナスの質問:私はこれを正しく行っていますか、それともクライアントが処理できる方法で致命的なエラーを処理するためのより良い方法がありますか?

4

1 に答える 1

5
ob_start(array($this, 'fatal_error_handler'));
于 2009-09-01T12:09:35.030 に答える