2009-07-27 29 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提供了参数提示,可以立即向我显示默认值在函数签名中。