由于PHP手册中的不一致(我在之前发布的),我只是在询问一些澄清。
功能参数页面( http://ca2.php.net/manual/en/functions.arguments.php )有以下注释:
注意:从PHP 5开始,默认值可以通过引用传递。
现在,我认为这只是意味着可以接受以下语法:
function foo(&$bar = null){
// ...
}
然而,由于其他不一致的原因,我想知道这是否属于其他事情。
答案 0 :(得分:4)
这意味着当你更改栏
$bar = "newvalue";
在功能上,旧(原版)也会受到影响
<?php
function foo(&$bar = null){
$bar = 'newval';
}
$bar = 'oldval, will be changed';
foo($bar);
echo $bar; //RETURNS newval
因此,如果您更改通过引用传递的任何变量,则更改的位置无关紧要,源代码也会更改
答案 1 :(得分:4)
这意味着在PHP 4中,对引用传递的参数使用默认值会导致解析错误:
Parse error: syntax error, unexpected '=', expecting ')' in ...
在PHP5中,当没有传递参数时,你的函数将有一个名为$bar
的普通局部变量,初始化为null
。
应该改写为:
注意:从PHP 5开始,函数声明可以为引用传递的参数定义默认值。
答案 2 :(得分:0)
我认为存在的唯一原因是允许在函数调用中跳过尾随参数
function test(&$bar = 10)
{
echo " '$bar' ";
$bar = $bar*2;
echo " '$bar' ";
}
test($aaa); // prints '' '0' (NULL as string, NULL*2)
echo $aaa; // prints 0 ($aaa is set to NULL*2)
echo "<br>";
$bbb = 6;
test($bbb); // prints '6' '12' (6, 6*2)
echo $bbb; // prints 12 ($bbb is set to 6*2)
echo "<br>";
test(); // prints '10' '20'
// (uses the default value since the argument was skipped, so: 10, 10*2)
因此,存在的原因仅仅是存在的可能性 $ bar设置为函数范围内的某个默认值 当您跳过函数调用中的前导参数
时如果是这样我同意你的意见,那么手册应该更准确地说明这个