在下面的函数中,我们有一些带有默认值的参数,如何调用该函数并为其中一些函数赋值。
function foo($a, $b='def b', $c='def c', $d='def d'){
//....
}
//call foo for $a='nu a' and $c='nu c'
foo('nu a', $c='nu c'); //but b will be assigned
我想为$c
设置值,并且不想仅为$c
分配所有值。
不可接受的解决方案:
foo('nu a', 'def b', 'nu c');
不可接受的解决方案
//moving c to second argument
function foo($a, $c='def c', $b='def b', $d='def d'){ }
所以参数是在一些默认参数之后,我不想为以前的参数设置一个默认值
答案 0 :(得分:0)
不可能。您正在寻找php不支持的命名参数。
如果您想这样做,您必须将参数更改为单个数组,并在函数体中根据键提取所需内容。
除此之外,你不能传递变量c的值而不传入b。
答案 1 :(得分:0)
除了指定false
,''
或null
等默认值之外,无法“跳过”参数。
您将使用以下内容:
function foo($settings) {
$a = $settings['a'];
$b = $settings['b'];
$c = $settings['c'];
$d = $settings['d'];
# code...
}
foo($settings = array(
'a' => null,
'b' => 'def b',
'c' => 'def c',
'd' => 'def d',
));
或者,在索引数组中,您可以使用list()
构造来处理数组值,如下所示:
function foo($settings) {
list($a, $b, $c, $d) = $settings;
# code...
}
foo(array(null, 'def b', 'def c', 'def d'));
至少你可以将大多数时候没想到的任何东西移动到函数定义中参数列表的末尾。
function foo($a, $b = 'def b', $c = 'def c', $d = 'def b') {
# code...
}
foo($a = 'def a');