"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que `array_shift()` aciona "Padrões rígidos: apenas variáveis ​​​​devem ser passadas por referência"?

Por que `array_shift()` aciona "Padrões rígidos: apenas variáveis ​​​​devem ser passadas por referência"?

Publicado em 2024-12-21
Navegar:378

Why Does `array_shift()` Trigger

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);
Tutorial mais recente Mais>

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