【发布时间】:2012-10-06 20:14:50
【问题描述】:
我是 php 新手,并且有 java 和 C 的编码经验。所以可选参数对我来说有点混乱。我想知道如果一个函数有两个可选参数,如果我传递一个参数,哪个参数将映射到参数?
【问题讨论】:
标签: php function parameters
我是 php 新手,并且有 java 和 C 的编码经验。所以可选参数对我来说有点混乱。我想知道如果一个函数有两个可选参数,如果我传递一个参数,哪个参数将映射到参数?
【问题讨论】:
标签: php function parameters
参数顺序永远不会改变(从左到右),所以如果你只提供一个参数,第一个参数将接收值,第二个参数将具有默认值。
例如:
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);
【讨论】:
第一个参数总是传递给参数中的第一个变量,第二个传递给第二个,依此类推,无论它们是否可选。
可选参数和非可选参数之间的唯一区别是,当调用中没有足够的参数来满足所有非可选参数时,会引发警告。
function f($a = 1, $b, $c, $d = 2)
{
var_dump($a, $b, $c, $d);
}
f('x');
函数内部$a 将为“x”,$b 和 $c 将为 null 并且$d 将为 2 但会引发警告强>。
因此,将可选参数留给非可选参数是没有意义的——尽管这在语法上是正确的——因为你永远不能在不生成警告的情况下将它们留在调用中。
【讨论】:
例如
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;
【讨论】: