2009-05-06 12 views
26

Hej, pracowałem z funkcją PHP, która pobiera wiele argumentów i formatuje je. Obecnie pracuję z mniej więcej tak:PHP pobiera wszystkie argumenty jako tablicę?

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

Ale zastanawiałem się, czy mogę użyć takiego rozwiązania:

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

Ale nadal wywoływać funkcję w ten sam sposób, podobny do params keyword w C# lub tablica argumentów w JavaScript.

Odpowiedz

60

func_get_args zwraca tablicę ze wszystkimi argumentami bieżącej funkcji.

+0

Jeden haczyka z func_get_args że warto zwrócić uwagę; nie można przekazać go do innego wywołania funkcji. – Rob

+4

@Rob Możesz, jeśli przejdziesz '$ args = func_get_args()', a następnie 'call_user_func_array ($ func, $ args)' – alex

+1

func_get_args() zwraca tylko wartości tych parametrów, które zostały PRZESZKANE do wywołania funkcji, nie wszystkie zdefiniowane parametry w definicji funkcji. –

6

Albo jak z PHP 7.1 jesteś teraz w stanie wykorzystać podpowiedź typu nazwie iterable

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

Może być również używany zamiast Traversable podczas iteracji za pomocą interfejsu. Jak również może być używany jako generator, który daje parametry.

Documentation