php的循环与引用的一个坑,php循环引用
上代码
<span>$arr</span> = <span>array</span><span>( </span>'a'=> 'a11', 'b'=> 'b22', 'c'=> 'c33',<span> ); </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$k</span>=>&<span>$v</span><span>){ </span><span>//</span><span> Do somethind</span> <span>} </span><span>foreach</span> (<span>$arr</span> <span>as</span> <span>$k</span>=><span>$v</span><span>){ </span><span>var_dump</span>(<span>$v</span><span>); }</span>
这样的代码, var_dump 会输出什么? 各位可以试试, 答案
<span>string</span>(3) "a11" <span>string</span>(3) "b22" <span>string</span>(3) "b22"
结果里, 第三行变成了 key='b' 的value. 问题就出在第一个循环的引用.
今天就踩到了一个这样的坑, 查问题用了很久. 简单来说, foreach循环使用的引用, 循环结束后有所保留. php.net 着重写了:
Warning
Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
对于上面这个例子, 第一个循环结束后, $v引用仍然存在. 由于两个循环的变量命名一致, 第二个循环开始, $v 每次都会被赋值. 直到最后, $v 被设置成了
前一个元素的值.
原理很简单, 文档写的明明白白. 但如果工作中遇到相关的bug是很坑的, 定位需要很久. 还得需要写码的时候就注意:
1. 减少引用的使用
2. 如果需要在foreah使用引用, 应该用函数将封装起来
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章
如何修复KB5055523无法在Windows 11中安装?
4 周前ByDDD
如何修复KB5055518无法在Windows 10中安装?
4 周前ByDDD
<🎜>:种植花园 - 完整的突变指南
3 周前ByDDD
<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前By尊渡假赌尊渡假赌尊渡假赌
如何修复KB5055612无法在Windows 10中安装?
3 周前ByDDD

热工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。