|
本文整理自 stackoverflow 网站上的一篇文章 Strange behaviour after loop by reference - Is this a PHP bug? —— 在 PHP 循环中,如果使用 引用 会引发非常奇怪的行为 - 这是 PHP 的一个 bug 吗? 问题在我写一个简单的 php 脚本时,发生了一些非常奇怪的现象。下面是我的代码,为了清楚的表达我的意思,我特意去掉了一些不必要的代码:
输出如下:
这是 PHP 的一个 bug 吗?PHP 中为什么会发生如此古怪的行为呢? 解析在第一个 foreach 循环结束后,$item 仍然引用(reference)着数组的最后一个元素,也就是 $arr[2]。 因此,当开始第二个循环的时候,$item 变量每次循环都会被赋一个新值。 在 php 中,如果一个内存空间是被引用的,那么当改变它的时候是直接改变这块内存空间的值。 当改变 $item 的时候,其实也改变了 $arr[2] 的值。 因此,在第二个循环中: 第一次循环,$item 和 $arr[2] 的值变成 $arr[0],也就是 'foo'。 第二次循环,$item 和 $arr[2] 的值变成 $arr[1],也就是 'bar'。 第三次循环,$item 和 $arr[2] 的值变成 $arr[2],也就是 'bar'($arr[2] 的值不是 'baz',因为在第二次循环中变成了 'bar')。'baz' 的值实际是在第二个循环中丢失了。 立即学习“PHP免费学习笔记(深入)”; 译注:我不喜欢把 reference 翻译成「引用」,当然了,更不能翻译成「参考」了。每次我像别人解释 reference 时,都会告诉他: reference 就是 alias。 比如你叫吴毅昌(呵呵,无异常),二狗子是你的别名。本着好兄弟好基友的情谊:“来,二狗子,这 100 块钱给你吧。” 你——吴毅昌——回家一模口袋,多了 100 块钱。 @justjavac 调试输出我们可以修改代码来调试并跟踪循环的执行细节。 我们可以输出 $item 的值,并且递归的输出数组 $arr。 当第一个循环运行时,我们可以看到这样的输出:
Kuwebs企业网站管理系统3.1.5 UTF8
下载
酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描
在循环结束后,$item 和 $arr[2] 指向同一个内存区域。 当第二个循环运行时,我们看到这样的输出:
在这次循环中,需要注意随着每次 $item 被赋予一个新值, $arr[2] 也会被赋值为和 $item 相同的值,因为它们都仍然指向相同的内存空间(译注:原文写的是 $arr[3],疑为原作者笔误。@justjavac)。 当循环到达数组的第三个值时,它包含的值是 bar,因为它的值在前两次循环中,被修改了。 还有疑问也许你觉得,我仅仅是执行了一个空循环 foreach ($arr as &$item){},循环体里面什么都没有做,为什么数组元素却改变了? 可能你觉得这个代码应该等价于
其实不对,代码应该等价于:
也就是说, 在 foreach 循环中,隐含了一个赋值运算,唯一不同的时, 在赋值过程中,我们使用了引用,所以在第一个循环中,无意中修改了正在循环的数组内部的元素。 |
0
0
PHP
相关文章
初学者学php先装什么环境_初学者学php先装环境推荐【准备】
如何在 PHP 中从嵌套数组中提取指定字段(如 code)
HTTP POST 请求循环超时问题的解决方案
PHP中关联与展示独立数组数据:避免嵌套循环的策略
PHP定时邮件发送:使用Cronjobs和任务调度器实现
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
2026赚钱平台入口大全
2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。
76
2026.01.31
无需付费的漫画app大全
想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。
67
2026.01.31
漫画免费在线观看地址大全
想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。
19
2026.01.31
热门下载
精品课程
相关推荐
/
热门推荐
/
最新课程
搭建网站 vscode+xdebug调试php代码 调试环境搭建
共2课时 | 0.2万人学习
进程与SOCKET
共6课时 | 0.4万人学习
【李炎恢】ThinkPHP8.x 后端框架课程
共50课时 | 4.5万人学习








