澄清PHP手册;通过引用传递的默认值

时间:2011-09-07 19:03:14

标签: php function parameters

由于PHP手册中的不一致(我在之前发布的),我只是在询问一些澄清。

功能参数页面( http://ca2.php.net/manual/en/functions.arguments.php )有以下注释:

  

注意:从PHP 5开始,默认值可以通过引用传递。

现在,我认为这只是意味着可以接受以下语法:

function foo(&$bar = null){
    // ...
}

然而,由于其他不一致的原因,我想知道这是否属于其他事情。

3 个答案:

答案 0 :(得分:4)

这意味着当你更改栏

$bar = "newvalue";

在功能上,旧(原版)也会受到影响

<?php
function foo(&$bar = null){
    $bar = 'newval';
}

$bar = 'oldval, will be changed';
foo($bar);
echo $bar; //RETURNS newval

因此,如果您更改通过引用传递的任何变量,则更改的位置无关紧要,源代码也会更改

http://sandbox.phpcode.eu/g/51723

答案 1 :(得分:4)

这意味着在PHP 4中,对引用传递的参数使用默认值会导致解析错误:

Parse error: syntax error, unexpected '=', expecting ')' in ...

Demo

在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设置为函数范围内的某个默认值 当您跳过函数调用中的前导参数

如果是这样我同意你的意见,那么手册应该更准确地说明这个