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);
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