Укажите ob_start на функцию внутри класса для обнаружения неустранимых ошибок
-
20-09-2019 - |
Вопрос
Я пытаюсь создать универсальный класс на PHP, который предоставит способ вызывать веб-службу, анализировать возвращаемый 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
включен в мой конструктор?
Дополнительный вопрос:правильно ли я это делаю, или есть лучший способ обрабатывать неустранимые ошибки так, чтобы с ними мог справиться клиент?
Решение
ob_start(array($this, 'fatal_error_handler'));