查看之前的代码如下:
//循环组装返回数据
foreach ($rows as &$row){
// 不知此处 & 的作用
}
& 符号的作用
-
&是指逻辑上表示两者属于缺一不可的关系,还表示意思是一个人和另外一个人之意,与and同义。
-
&在PHP项目中是经常使用的一个操作符, 例如按位与丶逻辑操作丶引用变量丶引用传递丶引用返回。
按位与
$a & $b 将把 $a 和 $b 中都为1的位设为1.
条件操作符
$a && $b只有$a和$b均为真,结果才为真。
引用变量
PHP的引用允许你用两个变量来指向同一个内容。无论对哪个变量名的值进行了修改,其他变量名访问的内容也会随之改变。
与C语言中的指针是有差别的。C语言中的指针里面存储的是变量的内容,在内存中存放的地址。
<?php
$a = 10;
$b = &$a;
$a = 11;
var_dump($a, $b); // 输出11, 11
$b = 12;
var_dump($a, $b); // 输出12, 12
foreach循环时加&符号会有什么问题? 例如以下代码能正常输出期望值吗?
<?php
$values = ['Python', 'Php', 'Go'];
foreach ($values as &$value)
{
$value = strtoupper($value);
echo $value. PHP_EOL; // 输出 PYTHON PHP GO
}
foreach ($values as $value){
echo $value . PHP_EOL; // 输出 PYTHON PHP PHP
}
预期结果是: ['PYTHON', 'PHP', 'GO'] 实际结果是['PYTHON', 'PHP', 'PHP']。
这是因为第一次foreach中使用了引用, 使$value成为了引用变量, 并且$arr[2]和$value指向了同一个地址空间(共享变量值), 第二次foreach时, 不断的将$values中的值赋给$value, 导致$arr[2]的值也被修改了。
其他参考资料:
本文来自博客园,作者:depressiom,转载请注明原文链接:https://www.cnblogs.com/depressiom/p/16227530.html