"&"运算符如何在PHP函数中工作?

Dec*_*ard 9 php

请看这段代码:

function addCounter(&$userInfoArray) {
    $userInfoArray['counter']++;
    return $userInfoArray['counter'];
}

$userInfoArray = array('id' => 'foo', 'name' => 'fooName', 'counter' => 10);
$nowCounter = addCounter($userInfoArray);

echo($userInfoArray['counter']);
Run Code Online (Sandbox Code Playgroud)

这将显示11.

但!如果在函数参数中删除"&"运算符,则结果为10.

这是怎么回事?

Kon*_*lph 32

&运营商告诉PHP不要把它传递给函数时数组复制.而是将对数组的引用传递给函数,因此该函数修改原始数组而不是副本.

看看这个最小的例子:

<?php
function foo($a) { $a++; }
function bar(&$a) { $a++; }

$x = 1;
foo($x);
echo "$x\n";    
bar($x);
echo "$x\n";
?>
Run Code Online (Sandbox Code Playgroud)

这里的输出是:

1
2
Run Code Online (Sandbox Code Playgroud)

- 调用foo没有修改$x.bar另一方面,呼吁做了.


Ham*_*ite 6

这里的&字符表示变量是通过引用传递,而不是通过值传递.两者之间的区别在于,如果您通过引用传递,则对变量所做的任何更改也会对原始文​​件进行更改.

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
Run Code Online (Sandbox Code Playgroud)