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
コンストラクターに含めるにはどうすればよいですか?
ボーナスの質問:私はこれを正しく行っていますか、それともクライアントが処理できる方法で致命的なエラーを処理するためのより良い方法がありますか?