“&”运算符如何在PHP函数中工作?
请看这个代码:
function addCounter(&$userInfoArray) {
$userInfoArray['counter']++;
return $userInfoArray['counter'];
}
$userInfoArray = array('id' => 'foo', 'name' => 'fooName', 'counter' => 10);
$nowCounter = addCounter($userInfoArray);
echo($userInfoArray['counter']);
这将显示11。
但! 如果在函数参数中删除“&”运算符,结果将为10。
这是怎么回事?
&
运算符告诉PHP在将数组传递给函数时不要复制数组。 而是将对数组的引用传递给该函数,因此该函数会修改原始数组而不是副本。
看看这个最简单的例子:
<?php
function foo($a) { $a++; }
function bar(&$a) { $a++; }
$x = 1;
foo($x);
echo "$xn";
bar($x);
echo "$xn";
?>
在这里,输出是:
1
2
- 对foo
的调用没有修改$x
。 另一方面, bar
的电话确实如此。
这里的&
表示变量是通过引用传递的 ,而不是通过值传递的 。 两者之间的区别在于,如果您通过引用传递,则对变量所做的任何更改也会发送给原始。
function do_a_thing_v ($a) {
$a = $a + 1;
}
$x = 5;
do_a_thing_v($x);
echo $x; // echoes 5
function do_a_thing_r (&$a) {
$a = $a + 1;
}
$x = 5;
do_a_thing_v($x);
echo $x; // echoes 6
在函数调用中的变量之前使用&符号时,它与原始变量本身关联。 这样,你发布的代码就会说它会将原始数组的计数器加1。 如果没有&符号,它将获取数据的一个副本并添加到它,然后返回11的新计数器。旧数组在10时仍保持不变,并且新计数器变量返回为11。
http://www.phpreferencebook.com/samples/php-pass-by-reference/
是一个很好的例子。
链接地址: http://www.djcxy.com/p/1701.html