将ob_start指向类中的函数以捕获致命错误

时间:2009-09-01 12:02:51

标签: php fatal-error

我正在尝试在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是我的班级名称) - 无济于事。

我的问题是,如何将类函数的名称传递给{{ 1}}包含在我的构造函数中?

一个额外的问题:我这样做是对,还是有一种更好的方法来处理客户端可以处理的致命错误?

1 个答案:

答案 0 :(得分:5)

ob_start(array($this, 'fatal_error_handler'));