como resolver strict standards - erro comum na nova versao do php
TRANSCRIPT
COMO RESOLVER Strict Standards: Only variables should be passed by reference
Oi, galera.
Venho apresentar a vocês um erro que tem ocorrido muito nas novas versões do Php, " Strict Standards: Only variables should be passed by reference " (Erro fatal: Apenas as variáveis podem ser passadas por referência), este erro informa que você só pode passar variáveis como referência e não uma função que retorna uma matriz.
Eu não conhecia este erro até que ele bateu na minha porta. Então vamos deixar de enrolar e falar como resolver este erro.
Verifique a linha que informa o erro provavelmente você está passando como referência um função que retorna uma matriz, exemplo:
<?php $nome = "wesley_david_santos"; $nome_arr = end( explode( '_', $nome) );
?>
No exemplo acima a variável $nome recebe um texto separado por underline ( _ ), na linha seguinte a variável passa pela função explode() onde é transformado em um array que já é passado como referência para a função end() e é nisso que gera o erro, pois não é permitido passar o retorno de um array para outra função, o método que você deve fazer é atribuir este retorno a uma variável e usar esta variável como referência, exemplo:
<?php $nome = "wesley_david_santos"; $arr = explode( '_', $nome) ; $nome_arr = end( $arr );
?>
Neste exemplo estou atribuindo o retorno da função explode() a uma variável com o nome de $arr e estou passando esta variável como referência na função end() desta forma não gera o erro.
Um outro exemplo meio grotesco de fazer isso, não recomendo, estou mostrando para que você possa ver outra forma de contornar o erro.
<?php
$nome = "wesley_david_santos"; $nome_arr = end( $arr = explode( '_', $nome) );
?>Neste exemplo já atribuo o array a uma variável que já é passada como referência para a outra função.
Esse erro é gerado por uma corrupção na memória, uma vez cheguei a ler rapidamente isso na documentação do Php.
Mesmo se ainda não aconteceu contigo, evite passar o retorno de uma matriz como referência para outra função pois talvez a versão do seu Php ainda não identifica este erro mas um dia você vai atualizar a versão, e ai complicou, abrir os scripts e alterar, então é melhor evitar.