php高级基础---php在foreach循环后留下数组的引用问题
eg:
<?php
$arr = array(1,2,3,4);
foreach($arr as $key => &$value){
}
foreach($arr as $key => $value){
}
?>
result:
[1,2,3,3]
解释:
1. foreach不是块级域,数组引用结束,$key , $value 并没有释放内存
2. 当第一次引用循环结束的时候,$value指向数组最后一个元素4
3. 当第二次开始循环 (此时$value 已经是指向最后一个元素,是引用)
循环4次 数组的变化分别是:
1 -> [1,2,3,4]
2 -> [1,2,3,4]
3 -> [1,2,3,3]
第三次value指向最后一个元素3 但是value是全局引用在上次循环指向了最后一个元素 所以value=3的时候 也会把最后一个元素的值改为3
4 -> [1,2,3,3]
注意事项:
1. foreach 实现原理有个内部指针的概念
2. &的foreach循环结束 指针会指向最后一个元素
如何避免:
在用&foreach循环后 unset ($value)
2019-08-01: 今天看到很多人在关注这个问题,关于鸟哥解释的php源码分析的foreach,大家感兴趣的可以去看看:http://www.laruence.com/2008/11/20/630.html
0 条评论