php通过引用传递不起作用


php passing by reference not working

我只是想通过尝试PHP.net上的一些例子来理解PHP中的引用传递。我在PHP网站上有一个例子,但它不起作用:

function foo(&$var)
{
    return $var++;
}
$a=5;
echo foo($a); // Am I not supposed to get 6 here? but I still get 5

这是的一个例子

有人能告诉我为什么变量$a的值是5而不是6吗?

您的代码和示例代码不相同。奇怪的是他们的行为不同吗?

要查看预期的行为,必须将$var++更改为++$var

这里发生的情况是,虽然函数返回后$a的值为6,但由于后增量运算符($var++)的工作方式,返回的值为5。你可以用测试

$a=5; 
echo foo($a); // returns 5
echo $a; // but prints 6!

因为$a++返回$a,然后递增一。

要做你想做的事情,你需要做++$a

http://www.php.net/manual/en/language.operators.increment.php

这与增量运算符有关,而不是通过引用传递。如果你查看手册,你会发现要展示你想要的行为,你必须将foo()更改为使用前增量而不是后增量,就像这样:

function foo(&$var)
{
    return ++$var;
}

现在:

> $a = 5;
> echo foo($a);
6

不,这很好用。$var++返回$var的值,然后递增变量。所以返回的值是5,也就是echo。变量$a现在被更新为6

尝试回显实际变量:

echo $a; // 6

如果您在返回之前递增,那么您的示例将起作用:

return ++$var;

与问题没有直接关系,只与主题有关。似乎确实有一个PHP错误。。。

$arr = array();
$arr["one"] = 1;
$arr["two"] = 2;
$arr["three"] = 3;
foreach ($arr as $k => &$v) {
$v += 3;
}
foreach ($arr as $k => $v) {
echo("'n".$k." => ".$v);
}

输出:

one => 4
two => 5
three => 5
(changing '$v' to '$val' (or some other variable name other than '$v')       
in the second (i.e. last) 'foreach' will result in the expected correct
output (one => 4 two => 5 three => 6)