Aponte ob_start para uma função dentro de uma classe para capturar erros fatais
-
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?
Solução
ob_start(array($this, 'fatal_error_handler'));