2009-05-06 4 views
26

Hey, je travaillais avec une fonction PHP qui prend plusieurs arguments et les formats. À l'heure actuelle, je travaille avec quelque chose comme ceci:PHP obtient tous les arguments en tant que tableau?

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

Mais je me demandais si je peux utiliser une solution comme ceci:

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

Mais invoquer encore la fonction de la même manière, similaire à la le mot-clé params en C# ou le tableau d'arguments en JavaScript.

Répondre

60

func_get_args renvoie un tableau contenant tous les arguments de la fonction en cours.

+0

Un Gotcha avec func_get_args qui est intéressant de souligner; vous ne pouvez pas le passer dans un autre appel de fonction. – Rob

+4

@Rob Vous pouvez si vous allez '$ args = func_get_args()' et puis 'call_user_func_array ($ func, $ args)' – alex

+1

func_get_args() retourne uniquement les valeurs de ces paramètres qui ont été passés à l'appel de fonction, pas tous les paramètres définis dans la définition de la fonction. –

6

Ou comme de PHP 7.1 vous êtes maintenant en mesure d'utiliser un indice de type appelé iterable

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

De plus, il peut être utilisé à la place de Traversable lorsque vous effectuez une itération à l'aide d'une interface. De même qu'il peut être utilisé comme un générateur qui donne les paramètres.

Documentation

Questions connexes