2009-07-19 62 views
1

有沒有辦法將無限量的參數傳遞給函數,並且可以訪問所有這些參數而無需在標題中定義每個參數。這裏是一個例子,使其更加清晰:訪問未定義的參數

function doSomething($var1="", $var2="".........) 
{ 
    // Do something with the arguments 
} 

我不想去定義一堆參數。有沒有辦法只抓取數組中的所有參數?即使他們沒有被定義? (PHP BTW)

最終的結果應該是這個樣子:

func("hello", "ya", "hi", "blah", "test", "go"); 

function func() 
{ 
    //Loop Over Arguments 
} 

我已經看到了一些PHP函數,能夠接受的論點看似無限的數字,但可以用戶自定義函數做一樣?

回答

5

您可以使用func_get_argsfunc_get_argfunc_num_args

考慮您已聲明這三個變量:

$param_1 = "A"; 
$param_2 = "B"; 
$param_3 = "C"; 

這裏的第一個例子,使用func_get_args獲得在一個陣列中的所有參數:

my_function_1($param_1, $param_2, $param_3); 

function my_function_1() 
{ 
    $num_args = func_num_args(); 
    if ($num_args >= 1) { 
     $args = func_get_args(); 
     var_dump($args); 
    } 
} 

這裏是另一個獲取參數的一個接一個,func_get_arg

my_function_2($param_1, $param_2, $param_3); 

function my_function_2() 
{ 
    $num_args = func_num_args(); 
    if ($num_args >= 1) { 
     $args = func_get_args(); 
     for ($i = 0 ; $i<$num_args ; $i++) { 
      var_dump(func_get_arg($i)); 
     } 
    } 
} 
3

請參閱func_get_args。它確實是你想要的

+0

感謝您快速回復。 – 2009-07-19 22:31:57

0

你可以找到多少個參數的函數與using func_num_args()調用。然後,您可以通過使用func_get_arg(index)指定索引來指定每個參數,或者使用func_get_args()將所有參數指定爲數組。

例子:

function variable_arguments() { 
    echo "This function was called with ".func_num_args()." arguments.<br />"; 
    echo "Those arguments were:<br /><pre>"; 
    echo print_r(func_get_args()); 
    echo "</pre>"; 
} 

variable_arguments("Hello", 42, array(true)); 
0

正如其他人發佈的可以使用func_get_args()但爲什麼不嘗試通過在陣列中的參數之前? PHP是鬆散的類型,所以你可以存儲任何東西。

$params = array(1, 2, 'something'); 
doSomething($params); 

function doSomething($params) { 
    foreach ($params as $value) { 
    // do something. 
    } 
} 

我喜歡這個,因爲它使可見您期望的功能參數開發商和你,你通過了paramters陣列小的開銷喜歡還可以通過許多參數。