首页 > 其他 > 详细

foreach 中的引用

时间:2014-03-25 01:45:37      阅读:459      评论:0      收藏:0      [点我收藏+]

今天遇到了PHP语言的一个坑,开始以为是PHP的bug,相关代码简化如下:

bubuko.com,布布扣
 1 <?php
 2 
 3 $ary = array(‘first‘, ‘second‘, ‘third‘);
 4 
 5 foreach ($ary as $k => &$v) {
 6 }
 7 
 8 foreach ($ary as $k => $v) {
 9 }
10 
11 var_dump($ary);
bubuko.com,布布扣

dump出来的结果让人百思不得其解:

bubuko.com,布布扣
1 array(3) {
2     [0]=>
3     string(5) "first"
4     [1]=>
5     string(6) "second"
6     [2]=>
7     &string(6) "second"
8 }
bubuko.com,布布扣

为什么最后一个元素的值与倒数第二个相等了,还多了一个引用符号。果然在手册里查到了这么一个相关的警告

bubuko.com,布布扣

说foreach循环结束后$v保存了最后一个元素的引用,但还是不清楚上面这种情况到底是怎么发生的,然后搜索相关资料,终于在这篇文章把这个问题说明白了References and foreach 

大概是这个意思:第一个foreach循环之后,$v保存了$ary最后一个元素的引用,所以在第二次foreach循环中,每一次循环对$v的赋值,其实是对$ary最后一个元素进行赋值,遍历整个数组,最后一个元素的值自然与倒数第二个元素相等。在var_dump结果中最有一个元素前有个‘&‘符号,表示该元素已被其他值引用,这里就是$v。

foreach 中的引用,布布扣,bubuko.com

foreach 中的引用

原文:http://www.cnblogs.com/helloxk/p/3621909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!