我只是想通过尝试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)