preg_replace_callback e ob_start (bug?)
Antes de mais nada é importante mencionar que o código abaixo está funcionando! Eu tenho um ob_flush aberto, que pega o conteúdo e manda para um callback. Dentro deste callback eu faço uma busca por expressões regulares por tags {$ [conteudo] } e substituo pelo texto na língua correta dentro de um segumento callback da função preg_replace_callback.
A questão é o seguinte: veja que a tipagem do método substitui_texto é string, mas a função precisa retornar um array!!!!!! Diferente disso não funciona, e alguns erros também não são mostrados dentro deste último callback, mesmo com error = E_ALL!!
Para sugestões e debate...
//recebe os matchs da expressão regular do método flush_callback(), chama a função o mesmo número de vezes do match
private function substitui_texto(array $matches): string
{
//precisa retornar um array (mas não aceita a tipagem da função?? problema PHP??)
$a[0] = $this->arrLang[$matches[1]];
return $a[0];
}
//antes de enviar o buffer para o navegador, o recebe para processamento
private function flush_callback(string $buffer): string
{
//substitui as ocorrências de {$[conteudo]} pelo correspondente no array de tradução
$pattern = '/\{\$(.*?)\}/';
$buffer = preg_replace_callback($pattern, "self::substitui_texto", $buffer);
return $buffer;
}Discussão (0)
Carregando comentários...