2009-05-06 13 views
26

Hey, ich habe mit einer PHP-Funktion gearbeitet, die mehrere Argumente benötigt und sie formatiert. Derzeit arbeite ich mit so etwas wie folgt aus:PHP alle Argumente als Array erhalten?

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

Aber ich habe mich gefragt, ob ich eine Lösung wie diese verwenden:

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

aber immer noch die Funktion die gleiche Art und Weise, ähnlich wie das Aufrufen params-Schlüsselwort in C# oder das Argumentarray in JavaScript.

Antwort

60

func_get_args gibt ein Array mit allen Argumenten der aktuellen Funktion zurück.

+0

Ein Gotcha mit func_get_args, die es wert ist, den Hinweis auf; Sie können es nicht in einen anderen Funktionsaufruf übergeben. – Rob

+4

@Rob Sie können, wenn Sie gehen '$ args = func_get_args()' und dann 'call_user_func_array ($ func, $ args)' – alex

+1

func_get_args() gibt nur die Werte der Parameter, die zum Funktionsaufruf übergeben wurden, nicht alle Parameter definiert in der Funktionsdefinition. –

6

Oder wie von PHP 7.1 sind Sie nun in der Lage eine Art Hinweis iterable genannt verwenden

Auch kann es anstelle von Traversable verwendet werden, wenn Sie mit einer Schnittstelle iterieren. Sowie es kann als ein Generator verwendet werden, der die Parameter ergibt.

Documentation