2012-03-09 11 views
5
call_user_func('array_pop', $myarray); 

da 'Parámetro 1 a array_pop() espera que sea una referencia, valor dado', mientras quearray_pop() requiere obsoleta de llamada por referencia cuando se invoca desde call_user_func()

call_user_func('array_pop', &$myarray); 

da ' La referencia de paso de llamada ha sido desaprobada '.

Entonces, ¿qué se supone que debo hacer? Estoy en "PHP Version 5.3.5" en Windows, y la desactivación de advertencias obsoletas no es una opción.

Gracias!

+1

Quizás esto sirva como una solución alternativa: http://stackoverflow.com/questions/295016/is-it-possible-to-pass-parameters-by-reference-using-call-user-func-array –

Respuesta

5

O simplemente llame directamente:

array_pop($myarray); 

o uso call_user_func_array(), que acepta una matriz de referencias como parámetros sin gritando a usted acerca de llamadas en tiempo pasar por referencia:

call_user_func_array('array_pop', array(&$myarray)); 

La razón por la que esto no genera una advertencia acerca de la referencia de paso de llamada es que nada de eso sucede realmente. Hay una diferencia sutil entre passing a variable by reference y crear una matriz de referencias y pasar esa matriz por valor.

+0

Batirme a ella :) +1 – Dan

+0

¡Gracias! De hecho, leí esa respuesta en algún resultado de google, pero no pude ver que call_user_func fue reemplazado por call_user_func_ARRAY, así que pensé que tendría que cambiar mi función para nwrap the array (que no sería posible en mi caso, ya que estaba usando array_pop). –

+0

Simplemente genial ... –

Cuestiones relacionadas