美文网首页程序员
PHP的foreach的持有引用

PHP的foreach的持有引用

作者: tinyPhper | 来源:发表于2017-03-19 19:44 被阅读0次

“Assignment by reference is also supported, using the "$var = &$othervar;" syntax. Assignment by reference means that both variables end up pointing at the same data, and nothing is copied anywhere.”

“PHP 支持引用赋值,使用“$var = &$othervar;”语法。引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。”                                          

                                                                                                                                   --PHP manual

$map = array(1,2,3);

 foreach ($map as &$k){}

 foreach ($map as $k){}

 print_r($map);

输出的结果是Array ( [0] => 1 [1] => 2 [2] => 2 ),而不是Array ( [0] => 1 [1] => 2 [2] => 3 )。

分析程序:在第一次的foreach循环中,利用var_dump打印每一次的$map值,结果为:

array(size=3)0=>&int1  1=>int2  2=>int3

array(size=3)0=>int1  1=>&int2  2=>int3

array(size=3)0=>int1  1=>int2  2=>&int3

可以看出$key分别指向$map数组的每个元素,foreach结束以后$k指向$map第三个元素$map[2]。

在第二次的foreach循环中,利用var_dump打印每一次的$map值,结果为:

array(size=3)0=>int1  1=>int2  2=>&int1

array(size=3)0=>int1  1=>int2  2=>&int2

array(size=3)0=>int1  1=>int2  2=>&int2

相当于每次分别将$map的每个值赋给$k指向的地址上,也就是$map[2]分别为1,2,2,得出最后$map的结果是Array ( [0] => 1 [1] => 2 [2] => 2 )。

如果在第一个foreach结束以后加一个unset($key),将$key指向的地址清空以后,结果为Array ( [0] => 1 [1] => 2 [2] => 3 )。

相关文章

网友评论

    本文标题:PHP的foreach的持有引用

    本文链接:https://www.haomeiwen.com/subject/xbmmnttx.html