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

thi*_*yup 5 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;
}
Run Code Online (Sandbox Code Playgroud)

如果我拨打以下电话:

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');
Run Code Online (Sandbox Code Playgroud)

我想尝试拨打电话,以便在最后一个例子中我将'pota'显示为默认的$ veg参数,但是传入$ test'我设置'.

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

Luc*_*cky 7

只使用默认参数,你无法做到你想要的.默认值仅适用于缺少的参数,并且只能丢失最后一个参数.

你可以添加像这样的行

  $vega = $vega ? $vega : 'carrot';
Run Code Online (Sandbox Code Playgroud)

并将该函数调用为

testParam('apple',false,'something');
Run Code Online (Sandbox Code Playgroud)

或者使用更通用的技术,将参数名称作为键传递给数组中的参数.就像是

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
Run Code Online (Sandbox Code Playgroud)

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