2013-01-12 56 views
0

我需要創建一個函數,它將有大量的參數可以爲空或值。現在,我創建功能如下例所示:PHP:函數傳遞大量的數組作爲參數

function container($args){ 

    $args += array(
      'limit'    =>  10, 
      'container'   =>  null, 
      'container_class' =>  null, 
      'list_class'  =>  null, 
     ); 

    echo'<'.$args['container'].' class="'.$args['container_class'].'" >'; 

    echo 'My function will have other content here with the '.$args['limit']; 

    echo '<ul class="'.$args['list_class'].'" >'; 
    echo '<li>list itme here</li>'; 
    echo '</ul>' 

    echo '</'.$container.'>';  

} 

這是好的,如果我必須要通過在陣列4-5價值,但如果我有超過15-20密鑰來傳遞?必須有一些適當的方法來實現。

那麼我怎麼能創建一個函數以這種有效的方式來傳遞許多數組鍵作爲參數?

非常感謝

回答

3

15-20鍵並不是一個真正的大數組。當你需要考慮如何將某些東西傳遞給參數時,這是當你有1000個以上的鍵時。

無論如何,您可以使用「通過引用傳遞」概念(請參閱http://php.net/manual/en/language.references.pass.php)。當你必須修改變量爲函數而沒有任何返回語句時,這個概念很有用。 但是爲了達到這個目的,PHP不是發送變量的副本,而是發送一個引用內存中變量的密鑰。

而這個鍵並不取決於變量的大小。

如何使用?通過使用&符號在你的函數聲明 例如:

function container(&$args) 
{ 
    // your function 
} 

$args = array(1, 2, 3 ..., 100000); 
container($args); 

但是如果你使用「按引用傳遞」的理念要小心不要修改的$ args或的$ args將在主腳本修改。

最終世界:如果你有少於50個鍵不關心如何傳遞你的參數,只需使用通過複製(默認行爲)將會更安全!

+0

我在找你提供的參考。與此同時,我仍然對'&arg'和'args'的最後陳述感到困惑。你能幫我更清楚一點嗎? –

+0

我爲你創建了一個更詳細的例子:http://codepad.org/fG7Rs5TA。正如你所看到的,通過使用引用或複製變量沒有區別,只是聲明是不同的。但正如我所說的,如果在函數中修改變量時使用引用時要小心,它也將在主腳本上修改(如示例所示) – Kakawait

+0

只有在內容發生更改時,PHP纔會真正複製變量內容。所以在這裏通過引用可能是沒有必要的。 – dualed

0

Kakawait的最後一個陳述是真實的。

您應該在調用函數時使用$args而不是&$args