2009-07-27 33 views
4

我對PHP相當陌生,我想知道如何在第一個可選參數後設置可選參數?我如何在PHP中設置一個可選參數,第一個可選參數

例如,我有以下代碼:

function testParam($fruit, $veg='pota',$test='default test'){ 
echo '<br>$fruit = '.$fruit; 
echo '<br>$veg = '.$veg; 
echo '<br>Test = '.$test; 
} 

如果我提出以下電話:

echo 'with all parama'; 
testParam('apple','carrot','some string'); 
//we get: 
//with all parama 
//$fruit = apple 
//$veg = carrot 
//Test = some string 

echo '<hr> missing veg'; 
testParam('apple','','something'); 
//we get: 
//missing veg 
//$fruit = apple 
//$veg = 
//Test = something 

echo '<hr> This wont work'; 
testParam('apple',,'i am set'); 

我想嘗試撥打電話,這樣在最後一個例子我展示「POTA '作爲默認的$ veg參數,但通過$ test'我設置'。

我想我可以將0傳遞給$ veg,然後在代碼中分支它,如果$ veg = 0,然後使用'pota',但只是想知道是否有其他語法,因爲我無法在php.net中找到任何有關它。

回答

7

你不能用默認參數來做你想要的。默認值僅適用於缺少參數,只有最後一個參數可能會丟失。

您可以添加像線條

$vega = $vega ? $vega : 'carrot'; 

並調用該函數作爲

testParam('apple',false,'something'); 

,或者使用傳遞參數與所述參數名作爲關鍵字數組的更一般的技術。像

function testparam($parms=false) { 
    $default_parms = array('fruit'=>'orange', 'vega'=>'peas', 'starch'=>'bread'); 
    $parms = array_merge($default_parms, (array) $parms); 
    echo '<br>fruit = $parms[fruit]'; 
    echo '<br>vega = $parms[vega]'; 
    echo '<br>starch = $parms[starch]'; 
} 

testparm('starch'=>'pancakes'); 
//we get: 
//fruit = orange 
//vega = peas 
//starch = pancakes 

這是一個更詳細一點,但它也更靈活。您可以添加參數和默認值,而無需更改現有的呼叫者。

2

不幸的是,你不能在PHP中這樣做。

您必須通過0或null或其他值,然後如果值爲0或null,請將其更改爲默認值。

Here是另一個應該給你提供更多信息的問題。

0

這是我使用的技術:

function testParam($fruit, $veg='pota', $test='default test') { 

    /* Check for nulls */ 
    if (is_null($veg)) { $veg = 'pota'; } 
    if (is_null($test)) { $test = 'default test'; } 

    /* The rest of your code goes here */ 
} 

現在使用的任何可選參數的默認值,只是通過NULL像這樣。

testParam('apple', null, 'some string'); 

在這個例子中,$veg將等於'pota'

此代碼示例的缺點是,你必須兩次編碼的默認值。在參數聲明中,您可以輕鬆地將默認值設置爲null,因此您不必將默認值編碼兩次,但是,我喜歡將其設置兩次,因爲我的IDE提供了參數提示,可以立即向我顯示默認值在函數簽名中。