如何在PHP中设置第一个可选参数之后的可选参数

如何在PHP中设置第一个可选参数之后的可选参数,php,parameter-passing,optional-parameters,Php,Parameter Passing,Optional Parameters,我对php相当陌生,我正试图弄清楚如何在第一个可选参数之后设置可选参数 例如,我有以下代码: function testParam($fruit, $veg='pota',$test='default test'){ echo '<br>$fruit = '.$fruit; echo '<br>$veg = '.$veg; echo '<br>Test = '.$test; } 函数testParam($fruit,$veg='pota',$test='de

我对php相当陌生,我正试图弄清楚如何在第一个可选参数之后设置可选参数

例如,我有以下代码:

function testParam($fruit, $veg='pota',$test='default test'){
echo '<br>$fruit = '.$fruit;
echo '<br>$veg = '.$veg;
echo '<br>Test = '.$test;
}
函数testParam($fruit,$veg='pota',$test='defaulttest')){
回声“
$fruit=”。$fruit; 回声“
$veg=”。$veg; echo'
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');
echo'with all parama';
testParam('apple','carrot','somestring');
//我们得到:
//全副武装
//$水果=苹果
//$veg=胡萝卜
//测试=一些字符串
回声“
缺少蔬菜”; testParam('apple','something'); //我们得到: //丢失的蔬菜 //$水果=苹果 //$veg= //测试 回声“
这行不通”; testParam('apple','i am set');
我想尝试调用,以便在上一个示例中,我将“pota”显示为默认$veg参数,但将其传递到$test“我已设置”


我想我可以将0传递到$veg中,然后在代码中分支它,如果$veg=0,然后使用'pota',但我想知道是否有其他语法,因为我在php.net中找不到任何关于它的语法。

不幸的是,在php中无法做到这一点

您必须传入0或
null
或其他值,然后如果该值为0或
null
,则将其更改为默认值


这是另一个应该为您提供更多信息的问题。

您不能只使用默认参数。默认值仅适用于缺少的参数,并且只能缺少最后一个参数

您可以像这样添加行

  $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
函数testparam($parms=false){
$default_parms=array('fruit'=>'orange'、'vega'=>'peas'、'starch'=>'bread');
$parms=array\u merge($default\u parms,(array)$parms);
echo'
水果=$parms[水果]; 回声“
vega=$parms[vega]”; echo'
淀粉=$parms[淀粉]; } testparm(‘淀粉’=>‘煎饼’); //我们得到: //水果=橘子 //维加=豌豆 //淀粉=煎饼

这有点冗长,但也更灵活。您可以在不更改现有调用者的情况下添加参数和默认值。

这是我使用的技术:

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