如何在 PHP 中在第一个可选参数之后设置可选参数
-
19-09-2019 - |
题
我对 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“i am set”。
我想我可以将 0 传递到 $veg 中,然后在代码中分支它,如果 $veg =0 则使用 'pota' 但只是想知道是否还有其他语法,因为我在 php.net 中找不到任何关于它的内容。
解决方案
您不能做你想做只默认参数是什么。默认值仅适用于丢失的参数,只有最后一个参数(一个或多个)可以是缺失的。
您可以添加像线条
$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
这是一个小更详细的,但它也更加灵活。可以添加参数和默认值不改变现有的呼叫者。
其他提示
这是我使用的技术:
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'
此代码示例的缺点是,你必须两次编码默认值。你可以很容易地设置默认值参数声明无效,所以你不必两次编码的默认值,但是,我喜欢把它两次,因为我的IDE给我参数暗示立即显示我的默认值在函数签名。
不隶属于 StackOverflow