php地址符&

2021-05-18 19:29

阅读:305

标签:理解   引用   als   改变   了解   地址   输出   size   dump   

 今天遇到一个很奇怪的问题

$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地址符&

标签:理解   引用   als   改变   了解   地址   输出   size   dump   

原文地址:http://www.cnblogs.com/foolzhou/p/7735468.html


评论


亲,登录后才可以留言!