亚洲城娱乐PHP的一个小问题。

( 亚洲城娱乐 )

为什么会这样?为啥前两个下标没引用,而偏偏最后一个用到了,谁能系统的解释一下以及原理。

因为foreach完成之后,最后的$a依然是引用的$array[2],但最后执行了$a=0,这里就相当于$array[2]=0(原来应该是$array[2]=9),所以最后的结果是

[1, 4, 0]

指针相互影响的原因, 貌似PHP7已经解决了该问题..

PHP5: 
•  $a = array1,2,3; foreach$a as $v { var_dumpcurrent$a } 
int2 
int2 
int2
•  $a = array1,2,3; $b=&$a; foreach$a as $v { var_dumpcurrent$a} 
int2 
int3 
boolfalse 
•  $a = array1,2,3; $b=$a; foreach$a as $v { var_dumpcurrent$a} 
int1 
int1 
int1 
PHP7: Doesn’t use/modify array internal pointer anymore 
•  $a = array1,2,3; foreach$a as $v { var_dumpcurrent$a } 
int1 
int1 
int1
•  $a = array1,2,3; $b=&$a; foreach$a as $v { var_dumpcurrent$a} 
int1 
int1 
int1 
•  $a = array1,2,3; $b=$a; foreach$a as $v { var_dumpcurrent$a} 
int1 
int1 
int1 

摘至鸟哥

弄明白引用与传值的区别,这个问题也就明白了。
在foreach中$a指的就是$array中的元素,通过循环先指向$array[0],然后是$array[1]…,你可以理解为$array中的元素在循环过程中多了一个$a标签,它们是指向同一个值物理地址的。所以在foreach中,$array的元素都被引用了,$a = $a这个运算结果反应在$array数组中。
其中当循环到第三次的时候,通过$a
=$a运算,$array[2]的值变为了9,循环结束,但是这是$a还是$array[2]的引用,并没有注销,这是将$a赋值为0,所以$array[2]就变成了0.
所以最终结果就是[1,4,0];

这问题前几天面试的时候正好遇到了,因为下面使用的$a还没有被释放掉,还是$array数组中的引用。所以一般使用foreach的引用传值时最好在后面unset一下咯

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…

发表评论

电子邮件地址不会被公开。 必填项已用*标注