2010-01-24 9 views
32

Quiero crear una función (my_function()) obteniendo un número ilimitado de argumentos y pasándolo a otra función (call_another_function()).PHP, ¿cómo pasar los valores de func-get-args a otra función como lista de argumentos?

function my_function() {  
    another_function($arg1, $arg2, $arg3 ... $argN);  
} 

Por lo tanto, desea llamar my_function(1,2,3,4,5) y obtener llamando another_function(1,2,3,4,5)

Sé que shoud uso func_get_args() para obtener todos los argumentos de la función como matriz, pero no saben cómo pasar esta argumentos a otra función .

Gracias.

+0

¿No puedes modificar another_function para aceptar una matriz como parámetro? – Aif

+0

No, es una función de terceros :( – Kirzilla

Respuesta

48

Trate call_user_func_array:

function my_function() {  
    $args = func_get_args(); 
    call_user_func_array("another_function", $args); 
} 

En la programación y la informática, esto se llama una función apply.

+8

¡Cuidado, func_get_args no se puede usar como parámetro para otra función! Necesitas una variable temporal para capturar los argumentos primero. – fresch

+1

@fresch, por qué ¿es eso? –

+2

@Jordan, eche un vistazo a esta pregunta: http://stackoverflow.com/questions/4979507/difference-in-behaviour-of-func-num-args-func-get-arg-and-func- get-args-from-php –

11

Uso call_user_func_array como

call_user_func_array('another_function', func_get_args()); 
+0

Nota: Esto solo funcionará en PHP 5.3+ – MPV

1

Aún no está documentado pero puede usar reflection API, especialmente invokeArgs.

(quizás debería haber utilizado un comentario en lugar de un post completo)

+0

He comprobado la API de reflexión, pero mi PHP OOP es demasiado pobre para comprender el lado práctico de la "API de reflexión". ( – Kirzilla

+0

) Aquí está la bonita url http://www.tuxradar.com/practicalphp/16/4/0 que me ayudó a entender la clase Reflection. – Kirzilla

Cuestiones relacionadas