请看这段代码:
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另一方面,呼吁做了.
这里的&字符表示变量是通过引用传递的,而不是通过值传递的.两者之间的区别在于,如果您通过引用传递,则对变量所做的任何更改也会对原始文件进行更改.
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)