"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué `array_shift()` activa "Estándares estrictos: sólo las variables deben pasarse por referencia"?

¿Por qué `array_shift()` activa "Estándares estrictos: sólo las variables deben pasarse por referencia"?

Publicado el 2024-12-21
Navegar:831

Why Does `array_shift()` Trigger

Mensaje de error "Estándares estrictos: solo las variables deben pasarse por referencia"

Al usar array_shift(), puede informar estándares estrictos advertencia si el argumento pasado es el resultado de una llamada a función. Este comportamiento es aparentemente inconsistente, ya que no siempre activa la advertencia.

Considere el siguiente código:

$el = array_shift($instance->find(..))

En este ejemplo, la advertencia se genera porque el método find() no es una variable. Sin embargo, el siguiente código no genera una advertencia:

function get_arr(){
    return array(1, 2);
}
$el = array_shift(get_arr());

Para comprender este comportamiento, analicemos un fragmento 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 genera una advertencia de estándares estrictos porque el método $t->get_arr() no es una variable y se pasa por referencia. Este comportamiento es contrario a la intuición porque el método devuelve un valor de matriz.

Para evitar este error en modo estricto, cambie la firma del método para evitar el uso de una referencia o use una variable intermedia:

function test_arr($a) {
    var_dump($a);
}

$inter = get_arr();
$el = array_shift($inter);
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3