2013-01-02 53 views
3

可能重複:
Any way to specify optional parameter values in PHP?
PHP function - ignore some default parametersPHP - 許多可選參數

假設我有功能是這樣的:

function foo($name = "john", $surname = "smith") { ... } 

我打電話來是這樣的:

$test = foo("abc", "def"); 

現在想象一下,我想跳過這個名字,只使用姓氏,那可以實現嗎?如果我只做$ test = foo(「def」);編譯器如何知道我指的是姓氏而不是名稱?我知道它可以通過傳遞NULL來完成,但我需要這樣的東西更多像這樣:

$test = foo($_POST['name'], $_POST['surname']); 

在此先感謝。

+0

[PHP函數 - 忽略某些默認參數]的可能重複(http://stackoverflow.com/questions/9541776/php-function-ignore-一些默認參數)。另請參見[是否可以省略函數調用中的隨機參數?](http://stackoverflow.com/questions/14120071/is-it-possible-to-omit-random-parameters-in-a-function-call ) –

回答

2

您的代碼

$test = foo($_POST['name'], $_POST['surname']); 

也將通過NULL在第一個參數,如果它是空的,所以編譯器會知道它是到第二個參數。在參數列表中有一個comma已經通知PHP這裏有兩個參數。

0

您可以通過向您的函數傳遞一個空字符串並在函數中檢測傳入的參數是否爲空字符串,如果是,則將其替換爲默認值。這將使你的函數調用,比如:

foo('','lastname'); 

你可以幾行添加到您的函數的開始,如果一個空字符串被作爲參數傳遞給檢測:

function foo($name = "john", $surname = "smith") { 
    if($name==='') { $name = 'john'} 
    //more code 
    ... } 
3

你可以試試這 -

$num_args = func_num_args(); 
if($num_args == 1) 
$surname = func_get_arg(1); 
else 
$surname = func_get_arg(2); 
$name = func_get_arg(1); 

請在使用它之前測試它。

+0

+1爲最佳答案,我打算張貼那一個,但誰是第一個值得獎勵。 –

+0

@AspiringAqib:thx .... –

0

我通常做一些像這樣:

function foo($parameters = array()) 
{ 
    print_r($parameters); 
} 

foo($_POST); //will output the array 

這是我用什麼,我希望有更多的超過3個參數。

但你不妨使用以下命令:

function foo() 
{ 
    $args = func_get_args(); 
    foreach ($args as $arg) { 
     echo "$arg \n"; 
    } 
} 
+1

+1另一個想法很好解釋更多,所以他可以使用這個! –

+0

如果只有兩個變量必須被函數使用,那麼這會浪費內存,但整個$ _POST數組作爲參數傳遞。 –