牛骨文教育服务平台(让学习变的简单)
博文笔记

php foreach循环 引用的时候的坑

创建时间:2018-01-28 投稿人: 浏览次数:234

前两天写递归的时候用到了 静态变量  引用  全局变量

用引用的时候出现了 一点意外  网上查资料 发现一个很好的例子来诠释

据说是金山的面试题

  1. $a = array("a","b","c");  
  2. foreach($a as &$v){}  
  3.   
  4. foreach($a as $v){  
  5.   
  6. }  
  7. var_dump($a);  

答案一般人肯定知道不是a,b,c 要是abc也没什么意义了 

正确的答案是a,b,b  可是这是为什么呢


首先 要准备的知识点  :引用  foreach数组的迭代


第一个循环:数组在循环的时候用了引用 把值赋值给了$v

一直到最后一次循环   这时$v变成了c;

这时候数组没有发生任何变化 还是abc


第二个循环  由于在上一个循环中用了 引用 变量名叫$v  循环完也没有释放掉  所以在以一次循环完之后$v还是存在的  

可以看到  第二次循环用的表达式变量名还是$v  而且共同指向了c 元素 

第二次开始循环 

第一轮:把a赋值给$v   由于$v是用了引用   上次结束循环的时候指向的是c  而且没有释放  这时候数组就变成了 a,b,a   

第二轮:数组把b赋值给$v   同理   数组变成了 a,b,b

第三轮:这时候因为数组变成了a,b,b 所以把b赋值给了 第三个值  因为第三个本来就是b  所以最后的结果  变成了a,b,b

 


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。