2009-05-06 9 views
26

Oye, estaba trabajando con una función PHP que toma múltiples argumentos y los formatea. Actualmente, estoy trabajando con algo como esto:PHP obtener todos los argumentos como una matriz?

function foo($a1 = null, $a2 = null, $a3 = null, $a4 = null){ 
    if ($a1 !== null) doSomethingWith($a1, 1); 
    if ($a2 !== null) doSomethingWith($a2, 2); 
    if ($a3 !== null) doSomethingWith($a3, 3); 
    if ($a4 !== null) doSomethingWith($a4, 4); 
} 

Pero me preguntaba si puedo utilizar una solución como esta:

function foo(params $args){ 
    for ($i = 0; $i < count($args); $i++) 
     doSomethingWith($args[$i], $i + 1); 
} 

Pero aún así invocar la función de la misma manera, similar a la la palabra clave params en C# o la matriz de argumentos en JavaScript.

Respuesta

60

func_get_args devuelve una matriz con todos los argumentos de la función actual.

+0

Uno de gotcha con func_get_args que la pena señalar; no puede pasarlo a otra llamada de función. – Rob

+4

@Rob Puedes si vas '$ args = func_get_args()' y luego 'call_user_func_array ($ func, $ args)' – alex

+1

func_get_args() solo devuelve los valores de los parámetros que se PASARON a la llamada de función, no todos los parámetros definidos en la definición de la función. –

6

O como de PHP 7.1 que ahora son capaces de utilizar una pista tipo llamado iterable

function f(iterable $args) { 
    foreach ($args as $arg) { 
     // awesome stuff 
    } 
} 

Además, se puede utilizar en lugar de Traversable cuando itera usando una interfaz. Además, puede usarse como un generador que produce los parámetros.

Documentation

Cuestiones relacionadas