Укажите ob_start на функцию внутри класса для обнаружения неустранимых ошибок

StackOverflow https://stackoverflow.com/questions/1362112

  •  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'));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top