2011-11-08 50 views
13

在PHP中,當定義函數時,可以創建的參數的最大數量是多少?這不是我正在做的事,只是在與同事討論時彈出一個問題:)PHP函數 - 最大參數個數

這是純粹的內存限制嗎?有效無限?

+2

爲什麼不測試? http://stackoverflow.com/questions/8049673/php-functions-maximum-number-of-arguments/8049856#8049856 – hakre

+0

我非常感謝他沒有,但問,而不是。你看,這樣我們也不一定都要。 SO再次爲社區服務。 –

回答

9

將函數的參數壓入堆棧,然後調用該函數讀取堆棧並將這些值用作參數。

因此,只要堆棧未滿,您可以繼續添加參數,但這取決於具體情況,並且在設計時您不會知道堆棧大小。

但我真的希望這是純粹的技術討論,你不需要它IRL。 ;-)

+0

哈哈,不,不,因爲我提到這不是IRL - 純粹的技術ramblings :-) – bagwaa

11

沒有限制。您可以始終使用func_get_args()func_get_arg()func_num_args()以避免在函數定義中寫入所有參數。

3

我真的不知道什麼是限制,但無論哪種方式,如果您創建一個函數的參數太多,您的代碼將不會很容易閱讀它。如果你想添加許多函數的參數,你可以做這樣的事情:

$option = array(
    'arg_1' => 'value', 
    'arg_2' => 'value', 
    .... 
    'arg_x' => 'value' 
); 

function function_name($args = "") 
{ 
    $defaults = array(
     'arg_1' => 'default_value', 
     'arg_2' => 'default_value' 
     .... 
     'arg_x' => 'default_value' 
    ); 

    $arguments = array_merge($defaults, (array)$args); 
    extract($arguments); 

    echo $arg_1; 
    echo $arg_x; 
} 
4

定義一個函數是什麼,你可以創建參數的最大數目?

我不知道作爲固定數字的參數數量的具體限制。一個快速測試表明,我沒有問題來定義一個255 555參數的函數。確定函數並執行它需要一些時間。但是,它的工作。

隨着數量的增加,我遇到了可能是字符串限制的內存限制。您可能想要改進測試用例,使用緩衝區並將文件依次保存到磁盤,然後將其包含在內:

$count = 255555; 

$code = 'function test(%s) {return 1;}; return test();'; 

$params = ltrim(implode('=0, $p', range(0, $count)), '0, =').'=0'; 

echo eval(sprintf($code, $params));