代码之家  ›  专栏  ›  技术社区  ›  Traveling Tech Guy

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

  •  2
  • Traveling Tech Guy  · 技术社区  · 17 年前

    我试图在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 包含在我的构造函数中?

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

    1 回复  |  直到 17 年前
        1
  •  5
  •   Alix Axel    17 年前
    ob_start(array($this, 'fatal_error_handler'));