php慎用foreach引用&

Home / Article MrLee 2020-6-1 2048

在foreach一个数组时需要在遍历同时改变对应符合条件元素的值,那么直接可以使用引用符号“&”,例如:

$variable = ['a', 'b', 'c'];

如果要改变第三个值,直接

<?php
$variable = ['a', 'b', 'c'];
foreach ($variable as $key => &$value) {
	if($key == 2)$value = 'ccc';
}
var_dump($variable);
?>

输出echo $variable[2];结果就是ccc了。此时$value指向数组地址$variable[2],因为php变量有效范围大($value在此php文件中均有效),和其它语言,Java,C/C++不一样,作用域很大不局限在foreach里面,所以如果在后面再作一个foreach 

foreach ($variable as $key => $value) {
}

那么,数组$variable[2]值就会变成b,结果似乎超出了我们意料!(为啥不是CCC呢)

看图:


最后地址首先指向$variable[0]->a,紧接着指向$variable[1]->b,最后指向自己,而此时自己就是指向$variable[1]的值,所以变成了b,也就是超出我们预期。那如何避免这种错误发生呢,那就是在foreach的时候,$value用一个不会和其它变量重名的名字即可,比如$value_temp

本文链接:https://www.it72.com/12637.htm

推荐阅读
最新回复 (0)
返回