我对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中找到任何关于它的内容。
答案 0 :(得分: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
这有点冗长,但也更灵活。您可以在不更改现有呼叫者的情况下添加参数和默认值。
答案 1 :(得分:2)
答案 2 :(得分: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为我提供了参数提示,可以立即显示默认值在函数签名中。