2011-02-15 16 views
8

en PHP ¿cómo crear una función que podría tener un número ilimitado de parámetros: myFunc($p1, $p2, $p3, $p4, $p5...);Argumentos ilimitados para la función PHP?

Mi siguiente pregunta es: ¿cómo pasarlos a otra función de algo así como

function myFunc($params){ 
    anotherFunc($params); 
} 

pero el anotherFunc sería recibir ellos como si se le llamó usando anotherFunc($p1, $p2, $p3, $p4, $p5...)

+1

http://php.net/manual/en/function.func-get-args.php lo más probable es lo que quiere. Defina la función sin argumentos y utilícela para obtener lo que se pasó en el tiempo de ejecución. – morphles

+0

posible duplicado de [¿Puede una función de PHP aceptar un número ilimitado de parámetros?] (Http://stackoverflow.com/questions/3078454/can-a-php-function-accept-an-unlimited-number-of-parameters) – JYelton

Respuesta

13
call_user_func_array('anotherFunc', func_get_args()); 

func_get_args devuelve una matriz que contiene todos los argumentos que se pasan a t La función se llamó desde y call_user_func_array llama a una función dada, pasándole una matriz de argumentos.

+1

+1 func_get_args existe exactamente para la situación donde necesita pasar una cantidad arbitraria de argumentos. – Endophage

0

Consulte la documentación de variable-length argument lists para PHP.

La segunda parte de su pregunta se refiere a variable functions:

... si una variable tiene unos paréntesis añadidos al final, PHP buscará una función con el mismo nombre que cualquiera que sea la evaluación de la variable , e intentará ejecutarlo.

2

¿Hay alguna razón por la cual no podría usar 1 argumento de función y pasar toda la información como una matriz?

+0

porque esto es para una función en una clase de cargador, se llama 'load :: library ('nombre', $ p1, $ p2, $ p3, $ p4);' devuelve una referencia a la nueva clase donde $ p1 ... se pasa al constructor – Hailwood

4

Anteriormente se debería haber utilizado func_get_args(), pero en un nuevo php 5.6 (currently in beta), se puede utilizar en lugar de utilizar ... operator.

Así, por ejemplo, se puede escribir:

function myFunc(...$el){ 
    var_dump($el); 
} 

y $el tendrá todos los elementos que va a pasar.

Cuestiones relacionadas