php的foreach中使用取地址符,注意释放
2016-02-19 17:08
507 查看
先来举个例子:
有的童鞋可能会答123,这里就说下,为什么是122。
在第5行代码里,循环$array时,使用的取地址符。循环结束以后,并没有释放$value,注意foreach并没有自己的域。所以如果不释放掉他,他依然存在在以后的代码。就此可能埋下了意外的bug。
循环结束后,这个$value指向的是数组第三个元素上。此时$array = array(1, 2, 3); 没有问题。 好,接着看第9行代码。
循环的时候如下进行(可以打开第10行注释查看):
把数组第一个元素的值1,给这个$value(指向的第三个元素上),第一次循环结束,数组是array(1, 2, 1);
第二次循环,把第二个元素的值2,再给这个$value(它仍然指向的是第三个元素)。数组变成了array(1, 2, 2);
第三次循环,把第三个元素的值2,再给这个$value,这样就变成了array(1, 2, 2);
所以,写代码时,如果循环时,取了地址,循环结束时尽量要unset()掉。除非你自己知道自己在干什么哈哈。
比如打开第7行的注释,那么结果就是123了。
<?php $array = array(1, 2, 3); foreach ($array as &$value) {} // unset($value); foreach ($array as $value) { // print_r($array); } echo implode($array);// 122
有的童鞋可能会答123,这里就说下,为什么是122。
在第5行代码里,循环$array时,使用的取地址符。循环结束以后,并没有释放$value,注意foreach并没有自己的域。所以如果不释放掉他,他依然存在在以后的代码。就此可能埋下了意外的bug。
循环结束后,这个$value指向的是数组第三个元素上。此时$array = array(1, 2, 3); 没有问题。 好,接着看第9行代码。
循环的时候如下进行(可以打开第10行注释查看):
把数组第一个元素的值1,给这个$value(指向的第三个元素上),第一次循环结束,数组是array(1, 2, 1);
第二次循环,把第二个元素的值2,再给这个$value(它仍然指向的是第三个元素)。数组变成了array(1, 2, 2);
第三次循环,把第三个元素的值2,再给这个$value,这样就变成了array(1, 2, 2);
所以,写代码时,如果循环时,取了地址,循环结束时尽量要unset()掉。除非你自己知道自己在干什么哈哈。
比如打开第7行的注释,那么结果就是123了。
相关文章推荐
- 140 php $_SERVER变量
- php设计模式
- PHP之错误显示控制
- PHP create_function()代码注入
- ContentProvider和Uri详解
- PHPStorm中的快捷键
- 命令行执行php
- thinkphp中find()和select()的区别
- PHP 错误处理
- ftell/ftello、fseek/fseeko、fsetpos/fgetpos、rewind
- php 怎么查看是否开启了socket
- fragmentPagerAdapter与fragmentStatePagerAdapter的区别
- php非代码级缓存技术(服务器)介绍
- php代码级别缓存技术介绍
- Ubuntu下找不到php5,phpize等可执行程序的解决办法
- PHP命名空间的使用详解 namespace
- php 注释规范
- PHP数组函数(6)
- 为什么建议php字符串使用单引号而不是双引号
- 解决phpMyAdmin最大限制