php的foreach中使用取地址符,注意释放

  先来举个例子:

 1 <?php
 2 
 3 $array = array(1, 2, 3);
 4 
 5 foreach ($array as &$value) {}
 6 
 7 // unset($value);
 8 
 9 foreach ($array as $value) {
10     // print_r($array);
11 }
12 
13 echo implode($array);// 122

 

有的童鞋可能会答123,这里就说下,为什么是122。

在第5行代码里,循环$array时,使用的取地址符。循环结束以后,并没有释放$value,注意foreach并没有自己的域。所以如果不释放掉他,他依然存在在以后的代码。就此可能埋下了意外的bug。

循环结束后,这个$value指向的是数组第三个元素上。此时$array = array(1, 2, 3); 没有问题。  好,接着看第9行代码。

循环的时候如下进行(可以打开第10行注释查看):

把数组第一个元素的值1,给这个$value(指向的第三个元素上),第一次循环结束,数组是array(1, 2, 1);

第二次循环,把第二个元素的值2,再给这个$value(它仍然指向的是第三个元素)。数组变成了array(1, 2, 2);

第三次循环,把第三个元素的值2,再给这个$value,这样就变成了array(1, 2, 2);

 

所以,写代码时,如果循环时,取了地址,循环结束时尽量要unset()掉。除非你自己知道自己在干什么哈哈。

比如打开第7行的注释,那么结果就是123了。

 

转载于:https://www.cnblogs.com/firstForEver/p/5201618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值