致命的なエラーをキャプチャするために、クラス内の関数にはob_startポイント

StackOverflow https://stackoverflow.com/questions/1362112

  •  20-09-2019
  •  | 
  •  

質問

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

私は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()コールにそれを追加することができます方法はありませんでした。私は(WebServiceが私のクラス名である)ob_start("$this->fatal_error_handler")を試みたが、ob_start("WebService::fatal_error_handler") - 無駄に

この私の質問は、どのように私は私のコンストラクタに含まob_startするクラスの関数の名前を渡しますされます。

。?

ボーナス質問:私はこの権利をやっている、またはクライアントが処理できる方法

で致命的なエラーを処理するAAより良い方法はありますか?
役に立ちましたか?

解決

ob_start(array($this, 'fatal_error_handler'));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top