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 回答