Aponte ob_start para uma função dentro de uma classe para capturar erros fatais

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Estou tentando criar uma classe genérica no PHP que fornecerá uma maneira de chamar um serviço da Web, analisar o XML retornando e retornará um objeto JSON.

Encontrei erros fatais em servidores que não suportam Curl e/ou JSON e procuram uma maneira de retornar graciosamente o erro em um objeto JSON de volta ao cliente, em vez de travar.
Depois de algumas pesquisas, encontrei um artigo que sugeria que eu poderia ligar ob_start("fatal_error_handler") e forneça uma função de manipulador:

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;
} 

e chamando ob_end_flush No final do script.
este funcionou bem, mas agora eu queria adicionar essa funcionalidade à minha classe. Eu tentei e consegui adicionar o seguinte construtor e destruidor:

    function __construct() {
        ob_start("fatal_error_handler");
    }

    function __destruct() {
        ob_end_flush();
    }

Mas quando tentei mover a função do manipulador para a classe, não havia como adicioná -lo ao ob_start() ligar. eu tentei ob_start("$this->fatal_error_handler"), e ob_start("WebService::fatal_error_handler") (Serviço da web sendo o meu nome de classe) - sem sucesso.

Minha pergunta é: como faço para passar o nome de uma função de classe para ob_start incluído no meu construtor?

Uma pergunta bônus: estou fazendo isso certo, ou existe uma maneira melhor de lidar com erros fatais de uma maneira que o cliente pode lidar?

Foi útil?

Solução

ob_start(array($this, 'fatal_error_handler'));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top