Somente variáveis podem ser passadas por referência
Tive a brilhante idéia de usar um manipulador de erros personalizado que me levou a uma toca de coelho.
O código a seguir fornece (com e sem o manipulador de erros personalizado):Erro fatal: somente variáveis podem ser passadas por referência
function foo(){
$b=array_pop(array("a","b","c"));
return $b;
}
print_r(foo());
O código a seguir fornece (somente com um manipulador de erros personalizado):(2048) Apenas variáveis devem ser passadas por referência
function foo(){
$a=explode( '/' , 'a/b/c');
$c=array_pop(array_slice($a,-2,1));
return $c;
}
print_r(foo());
O segundo me preocupa, pois tenho muito código 'compacto'. Portanto, ou evito a brilhante idéia de usar um manipulador de erros personalizado (para melhorar meu módulo de registro) ou expanda todo o meu código.
Alguém com melhores ideias? Além disso, WTF?
ATUALIZAR:
Graças às respostas, aprendi algo sobre como o php manipula erros. A confusão de E_ALL não incluindo E_STRICT (php 5) não é legal.
Além disso, a criação de seu próprio manipulador de erros personalizado habilita o E_STRICT por padrão e é aí que os problemas começam.
A moral da história é usar seu próprio manipulador de erros para capturá-los TODOS e usar as constantes de erro (E_STRICT, E_USER_WARNING, E_USER_ERROR etc.) para fazer sua filtragem.
Quanto ao 'problema de corrupção de memória' com referências variáveis e determinadas funções, o que posso dizer? Duplamente não legal. Vou (o que não significa que você deva) ignorar E_STRICT no meu manipulador de erros e a vida continua.