Mensagem de erro "Padrões rígidos: somente variáveis devem ser passadas por referência"
Ao usar array_shift(), ele pode relatar padrões rígidos aviso se o argumento passado for o resultado de uma chamada de função. Esse comportamento é aparentemente inconsistente, pois nem sempre aciona o aviso.
Considere o seguinte código:
$el = array_shift($instance->find(..))
Neste exemplo, o aviso é gerado porque o método find() não é uma variável. No entanto, o código a seguir não produz um aviso:
function get_arr(){ return array(1, 2); } $el = array_shift(get_arr());
Para entender esse comportamento, vamos analisar um trecho de código diferente:
error_reporting(E_STRICT); class test { function test_arr(&$a) { var_dump($a); } function get_arr() { return array(1, 2); } } $t = new test; $t->test_arr($t->get_arr());
Este código gera um aviso de padrões rígidos porque o método $t->get_arr() não é uma variável e está sendo passado por referência. Esse comportamento é contra-intuitivo porque o método retorna um valor de matriz.
Para evitar esse erro no modo estrito, altere a assinatura do método para evitar o uso de uma referência ou use uma variável intermediária:
function test_arr($a) { var_dump($a); } $inter = get_arr(); $el = array_shift($inter);
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3