如果我有以下功能:
function foo($a = 'a', $b = 'b', $c = 'c', $d = 'd')
{
// Do something
}
我可以调用此函数并仅传递$ d的值,因此将所有其他参数保留为默认值吗?代码如下:
foo('bar');
或者我必须用这样的东西来打电话:
foo(null, null, null, 'bar');
答案 0 :(得分:1)
你必须像你说的那样使用空值:
foo(null, null, null, 'bar');
如果你不介意创造更多功能,你可以做这样的事情,我想整体代码会更整洁。
function update_d($val){
foo(null, null, null, $val);
}
或者你可以像这样使用数组:
$args = array($a = 'a', $b = 'b', $c = 'c', $d = 'd');
foo($args);
答案 1 :(得分:1)
function foo($args) {
extract($args);
echo $bar + $baz;
}
foo(array("bar" => 123, "baz" => 456));
在php.net上写一个错误报告,并要求他们为该语言添加命名参数!
答案 2 :(得分:0)
你必须这样做
foo(null, null, null, 'bar');
另一种方法是将参数保留在函数签名之外,并使用func_get_args()
来检索值;
function foo() {
$args = func_get_args();
但是,如果你遗漏前三个null
值,那么就无法知道'bar'是$d
参数。请注意,这种方法在大多数情况下都是不受欢迎的,因为它会混淆您的功能签名并损害性能。
答案 3 :(得分:0)
简答:不。 答案很长:Nooooooooooooooooooooooooooooo。
当根本没有设置变量时,将使用默认参数值。
答案 4 :(得分:0)
如果没有overloading技术,你就无法做到。
在这种情况下,你的程序假定如果只传递一个参数,则它是第四个。
答案 5 :(得分:-1)
func_get_args() - 获取函数参数列表的数组 func_num_args() - 返回传递给函数的参数数量
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs<br />\n";
}
foo(a); foo(1,b,c); will work fine