2009-05-06 19 views
26

Ehi, stavo lavorando con una funzione PHP che accetta più argomenti e li formatta. Attualmente, sto lavorando con qualcosa di simile:PHP ottiene tutti gli argomenti come matrice?

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

ma mi chiedevo se posso usare una soluzione come questa:

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

Ma ancora richiamare la funzione allo stesso modo, simile al parola chiave params in C# o array di argomenti in JavaScript.

risposta

60

func_get_args restituisce un array con tutti gli argomenti della funzione corrente.

+0

Uno Gotcha con func_get_args che vale la pena sottolineare; non puoi passarlo a un'altra chiamata di funzione. – Rob

+4

@Rob È possibile se si va '$ args = func_get_args()' e quindi 'call_user_func_array ($ func, $ args)' – alex

+1

func_get_args() restituisce solo i valori di quei parametri che sono stati PASSATI alla chiamata della funzione, non tutti i parametri definiti nella definizione della funzione. –

6

O come di PHP 7.1 si è ora in grado di utilizzare un tipo di suggerimento chiamato iterable

Inoltre, può essere utilizzato al posto di Traversable quando si esegue l'iterazione tramite un'interfaccia. Così come può essere usato come un generatore che produce i parametri.

Documentation

Problemi correlati