2011-08-22 5 views
6

Jak bym go o napisanie funkcji w php z nieznaną liczbą parametrów, na przykładPh p pisanie funkcji o nieznanych parametrach?

function echoData (parameter1, parameter2,) { 
    //do something 
} 

Ale kiedy wywołać funkcję można użyć:

echoData('hello', 'hello2', 'hello3', 'hello'4); 

tak aby więcej parametrów może wysłane, ponieważ liczba parametrów będzie nieznana.

+2

możliwy duplikat [funkcji PHP z nieograniczoną liczbą parametrów] (http://stackoverflow.com/questions/1577383/php-function-with-unlimited-number-of-parameters) i [Czy funkcja PHP może akceptować nielimitowana liczba parametrów?] (http://stackoverflow.com/questions/3078454/can-a-php-function-accept-an-unlimited-number-of-parameters) –

Odpowiedz

11

func_get_args()

function echoData(){ 
    $args = func_get_args(); 
} 

Należy pamiętać, że podczas gdy można to zrobić, nie należy definiować żadnych argumentów w deklaracji funkcji, jeśli masz zamiar używać func_get_args() - po prostu dlatego, że staje się bardzo mylące, jeśli/gdy którykolwiek z określonymi argumentami są pomijane

podobne funkcje o argumentach

  • func_get_arg()
  • func_get_args()
  • func_num_args()
+0

Pamiętaj, że podczas gdy możesz to zrobić, nie powinien definiować żadnych argumentów w deklaracji funkcji, jeśli zamierzasz używać 'func_get_args()' - po prostu dlatego, że staje się bardzo mylące, jeśli/gdy któryś z zdefiniowanych argumentów zostanie pominięty. – DaveRandom

+0

@Dave: Nice catch. Dodam to do mojej odpowiedzi – genesis

2

użytku func_get_args(), aby odzyskać tablicę wszystkich parametrów tak:

$args = func_get_args(); 

Następnie można użyć tablicę lub iterację nad nim, cokolwiek garnitury Twój przypadek użycia najlepiej.

0

Można również użyć tablicy:

<?php  
function example($args = array()) 
{ 
    if (isset ($args["arg1"])) 
     echo "Arg1!"; 
} 

example(array("arg1"=>"val", "arg2"=>"val")); 
8

Tylko dla tych, którzy znaleźli ten wątek na Google.

In PHP 5.6 and above you can use ... określić nieznaną liczbę parametrów:

function sum(...$numbers) { 
    $acc = 0; 
    foreach ($numbers as $n) { 
     $acc += $n; 
    } 
    return $acc; 
} 

echo sum(1, 2, 3, 4); // 10 

$numbers jest tablicą argumentów.