“&”运算符如何在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

上一篇: How does the "&" operator work in a PHP function?

下一篇: What does this signature mean (&) in PHP?