Я пытаюсь создать универсальный класс в 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
, включенному в мой конструктор?
Бонусный вопрос: правильно ли я это делаю, или есть лучший способ справиться с фатальными ошибками так, как может обрабатывать клиент?