php地址符&
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php地址符&相关的知识,希望对你有一定的参考价值。
今天遇到一个很奇怪的问题
$arr=[‘a‘,‘b‘,‘c‘]; foreach($arr as &$v){ } foreach($arr as $v){ } var_dump($arr); unset($v); var_dump($arr);
这段代码相信咋一看都会以为输出的是abc
可是结果是:
array (size=3) 0 => string ‘a‘ (length=1) 1 => string ‘b‘ (length=1) 2 => &string ‘b‘ (length=1) array (size=3) 0 => string ‘a‘ (length=1) 1 => string ‘b‘ (length=1) 2 => string ‘b‘ (length=1) 重点在于
2 => &string ‘b‘ (length=1) 这个地方相当于给$v赋值为$arr[2]
原因在于&php的地址符
先来了解一下&的基本用法:
$b = $c = 1; $a = &$b; $a = 2; echo "b=$b,c=$c\n"; $a = &$c; $a = 100; $a = 200; echo "b=$b,c=$c\n"; unset($a); $a = 500; echo "b=$b,c=$c\n"; 上面$a指定成$b的引用之后,除非再次指定成其他引用,或者unset($a),否则改变$a就是改变对应的$b的值。
对于你这个foreach,也是同样的道理,你把循环单步拆开,就是这个样子:
$v = &$arr[0]; $v = &$arr[1]; $v = &$arr[2];
循环运行到最后的时候,$v是$arr[2]的引用,所以就相当于这么个形式:
$arr[0] = a; $arr[1] = b; $v = &$arr[2]; $arr[2] = b; var_dump($arr);
也就不难理解为什么var_dump会在最后的键值对上打印出一个&的符号了吧。
以上是关于php地址符&的主要内容,如果未能解决你的问题,请参考以下文章
PHP foreach 循环使用"&$val" 地址符“&”