前两天写递归的时候用到了 静态变量 引用 全局变量
用引用的时候出现了 一点意外 网上查资料 发现一个很好的例子来诠释
据说是金山的面试题
- $a = array('a','b','c');
- foreach($a as &$v){}
- foreach($a as $v){
- }
- 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