先来举个例子:

 <?php

 $array = array(1, 2, 3);

 foreach ($array as &$value) {}

 // unset($value);

 foreach ($array as $value) {
// print_r($array);
} echo implode($array);//

有的童鞋可能会答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了。

最新文章

  1. 分页组件 - layui.laypage
  2. 详解APM数据采样与端到端
  3. 将Mininet与真实网络相连接
  4. CSS HACK区别IE6、IE7、IE8、Firefox兼容性
  5. Android通过使用Properties保存配置
  6. UVALive 2056 Lazy Math Instructor(递归处理嵌套括号)
  7. PHP自定义函数
  8. JQ在线引用地址
  9. How to delete VSTS Project
  10. maya cmds pymel undoInfo chunk 撤销束
  11. _net之美 记录笔记
  12. 写一个小CTF平台
  13. 面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)
  14. ubuntu下安裝sogou拼音
  15. odoo开发笔记 -- 字段增加唯一约束
  16. 关于SQL SERVER中的FLOAT转换为VARCHAR
  17. [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问
  18. [MSDN] Windows Server 2012 R2 简/繁/英下载
  19. 快速找出System.Management.Automation.dll,c#调用powershell
  20. 增强基本选择器[selector_3.html]

热门文章

  1. 解决element-ui的el-select组件文字超过宽度时不出现横向滚动条问题
  2. 【读书笔记】iOS-使用传感器
  3. Cookie--小知识总结
  4. 【转】MySQL:日期函数、时间函数总结(MySQL 5.X)
  5. SoapUI&#160;访问代理设置
  6. OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
  7. 自动化测试基础篇--Selenium Python环境搭建
  8. LVS (Linux Virtual Server) - 负载均衡集群 - keepalived
  9. 微信小程序搭建和开发相关指引
  10. Python-数学篇之计算方法的目录: