como resolver strict standards - erro comum na nova versao do php

2

Click here to load reader

Upload: daniel-de-paiva-pereira

Post on 26-Jul-2015

159 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: COMO RESOLVER Strict Standards - Erro Comum Na Nova Versao Do Php

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 

Page 2: COMO RESOLVER Strict Standards - Erro Comum Na Nova Versao Do 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.