我是php的新手,在java和C中有编码经验。所以可选参数对我来说有点混乱。我想知道如果一个函数有两个可选参数,如果我传递一个参数,哪个参数将映射到参数?
答案 0 :(得分:5)
参数顺序永远不会改变(从左到右),所以如果只提供一个参数,第一个参数将接收该值,第二个参数将具有默认值。
例如:
function foo( $a = 1, $b = 2) {}
foo(); // $a = 1, $b = 2
foo( 3); // $a = 3, $b = 2
foo( 4, 5); // $a = 4, $b = 5
请注意,由于参数的顺序,由于$b
仍然保留默认值,因此无法为$a
设置值。您必须像这样调用foo()
才能实现这一目标:
foo( 1, 6);
答案 1 :(得分:1)
第一个参数总是传递给参数中的第一个变量,第二个参数传递给第二个,依此类推,无论它们是否是可选的。
可选参数和非可选参数之间的唯一区别是,当调用中没有足够的参数来满足所有非可选参数时,将引发警告。
function f($a = 1, $b, $c, $d = 2)
{
var_dump($a, $b, $c, $d);
}
f('x');
在函数$a
内," x",$b
和$c
将 null ,$d
将是2 但会发出警告。
因此,将非可选参数保留为可选参数是没有意义的 - 虽然这在语法上是正确的 - 因为你永远不会在调用中将它们遗漏而不会产生警告。
答案 2 :(得分:0)
例如
function test($test = null, $test_2 = null, $test_3 = null) {
}
test(1) => $test=1;
test(1,1) => $test=1;$test_2=1;
test(1,1,1) => $test=1;$test_2=1;$test_3=1;