我有一个看起来像这样的函数:
function test($arg1 = 'my_value', $arg2 = 'second')
{
}
当我调用它时,我只想将第二个值设置为不同的值,如下所示:
test(inherit, 'changed value');
我发现可以将此行添加到我的函数中(当我的“inherit”更改为null时):
$arg1 = ( is_null( $arg1 ) ? 'my_value' : $arg1 );
有更好的方法,更好的解决方法吗?
答案 0 :(得分:2)
根据参数的性质和数量,使用命名参数(至少是模拟的)可能是合理的:
function xyz($args) {
$args += array(
'x' => 'default',
'q' => 'default 2',
// ...
);
// ...
}
xyz(array('q' => 'hehe, not default'));
答案 1 :(得分:1)
你解决它的方式实际上非常实用。
另一种方法是每次在函数调用时传递与默认值相同的值。
如果那是结构性的,那么你必须重新考虑这个功能。
答案 2 :(得分:1)
制作两个不同的功能:
// Full function
function testex($arg1 = 'my_value', $arg2 = 'second')
{
}
// Shorthand when just argument 2 is needed
function test2($arg2 = 'second')
{
return testex('my_value', $arg2);
}
这样,您不必在不需要时将null传递给第一个参数。
答案 3 :(得分:0)
你必须翻转它们,你不能把第一个值留空,
设置第一个值,让第二个值成为默认值;
更新:
如果你想让你的参数有动态长度,可以考虑使用func_get_args();
function something() {
$args = func_get_args();
....
}
然后你可以测试你的参数的不同值或数据类型,让他们做任何事情,请