php的foreach中使用取地址符,注意释放
2024-10-15 23:38:01
先来举个例子:
<?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了。
最新文章
- 分页组件 - layui.laypage
- 详解APM数据采样与端到端
- 将Mininet与真实网络相连接
- CSS HACK区别IE6、IE7、IE8、Firefox兼容性
- Android通过使用Properties保存配置
- UVALive 2056	Lazy Math Instructor(递归处理嵌套括号)
- PHP自定义函数
- JQ在线引用地址
- How to delete VSTS Project
- maya cmds pymel undoInfo chunk 撤销束
- _net之美 记录笔记
- 写一个小CTF平台
- 面试问烂的 Spring AOP 原理、SpringMVC 过程(求求你别问了)
- ubuntu下安裝sogou拼音
- odoo开发笔记 -- 字段增加唯一约束
- 关于SQL SERVER中的FLOAT转换为VARCHAR
- [内核驱动] VS2012+WDK 8.0 Minifilter实现指定扩展名文件拒绝访问
- [MSDN] Windows Server 2012 R2 简/繁/英下载
- 快速找出System.Management.Automation.dll,c#调用powershell
- 增强基本选择器[selector_3.html]
热门文章
- 解决element-ui的el-select组件文字超过宽度时不出现横向滚动条问题
- 【读书笔记】iOS-使用传感器
- Cookie--小知识总结
- 【转】MySQL:日期函数、时间函数总结(MySQL 5.X)
- SoapUI&#160;访问代理设置
- OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测
- 自动化测试基础篇--Selenium Python环境搭建
- LVS (Linux Virtual Server) - 负载均衡集群 - keepalived
- 微信小程序搭建和开发相关指引
- Python-数学篇之计算方法的目录: