PHP迭代器的小坑
使用PHP迭代器的时候,需要主要到很多迭代器是对内部迭代器的封装,当外部迭代器移动的时候,实际上也是在移动内部迭代器。
示例一:命令行
&"C:\wamp64\bin\php\php7.1.3\php.exe" -r '$a = new ArrayObject([7,8,9]); $b = $a->getIterator(); $c = new CachingIterator($b, CachingIterator::FULL_CACHE); echo $c->count(); $c->next(); echo $c->count(); echo $c->current(); echo $b->current(); $c->next(); echo $c->count(); echo $c->current(); echo $b->current();'
示例一:源代码
$a = new ArrayObject([7,8,9]);
$b = $a->getIterator();
$c = new CachingIterator($b, CachingIterator::FULL_CACHE);
echo $c->count(); //0
$c->next();
echo $c->count(); //1
echo $c->current(); //7
echo $b->current(); //8
$c->next();
echo $c->count(); //2
echo $c->current(); //8
echo $b->current(); //9
可以看出,虽然类的名字叫Caching,而且设置了FULL_CACHE选项,但是并没有缓存全部数据,而是访问一项,缓存一项,同时也在移动内部迭代器。
示例二:命令行
&"C:\wamp64\bin\php\php7.1.3\php.exe" -r '$a = new ArrayObject([7,8,9]); $b = $a->getIterator(); $c = $a->getIterator(); echo $c->count(); $c->next(); echo $c->count(); echo $c->current(); echo $b->current(); $c->next(); echo $c->count(); echo $c->current(); echo $b->current();'
示例二:源代码
$a = new ArrayObject([7,8,9]);
$b = $a->getIterator();
$c = $a->getIterator();
echo $c->count(); //3
$c->next();
echo $c->count(); //3
echo $c->current(); //8
echo $b->current(); //7
$c->next();
echo $c->count(); //3
echo $c->current(); //9
echo $b->current(); //7
可以看出此处的两个迭代器互不影响。
简单的说,如果希望对同一个数据迭代而且互不影响,那么应当先转成数据,然后创建ArrayIterator。程序简单的时候一般不会遇到这个问题,不过当程序复杂的时候,尽量还是避免迭代器之间的干扰。
PHP迭代器的小坑的更多相关文章
- mciSendString 的两个小坑
刚刚修正了自己用的小闹钟的代码. 坑1:REPEAT 选项的作用范围 原来用得好好的,之后选择 .wav 文件,居然不出声音了…… 诶,MCI 肯定支持 .wav 的啊…… 仔细想想,我以前都是选 . ...
- 注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式
注意Android里TextView控件的一个小坑,用android:theme来设置样式时动态载入的layout会丢失该样式 这个坑,必须要注意呀, 比如在用ListView的时候,如果在List_ ...
- C#中的Infinity有个小坑
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 昨天家里有事,上网也不方便,就没有推送文章.今天很累,也不长篇大论了.简单介绍一下最近遇到的 ...
- 使用EMMET中的小坑
使用EMMET写HTML的时候,是一个非常爽的事情.但是今天我使用时,发现一个小坑.以前倒也没有注意,不过需要非常的小心. form[action="/process" metho ...
- 关于CSS3中transform变换的小坑
2017年6月30日15:05:46 今天在写一个demo的时候,发现CSS3中transform变换的一个特性. 首先,我先描述一下我发现的情况(问题再现): <div class=" ...
- Vue中应用CORS实现AJAX跨域,及它在 form data 和 request payload 的小坑处理
基本概念部分(一):理解CORS 说道Vue的跨域AJAX,我想先梳理一遍CORS跨域,"跨域资源共享"(Cross-origin resource sharing),它是一个W3 ...
- go的变量redeclare的问题,golang的一个小坑
go的变量声明有几种方式: 1 通过关键字 var 进行声明 例如:var i int 然后进行赋值操作 i = 5 2 最简单的,通过符号 := 进行声明和赋值 例如: i:=5 golang会 ...
- MySQL中字段类型为timestamp的小坑
之前遇到过一个MySQL的字段为timestamp类型的小坑. MySQL中一个字段存储时间类型数据的时候,该字段的类型如果为timestamp类型的话,最多只能存储到2038-01-19 11:14 ...
- mysql url 连接配置的一个小坑。 工作中不会遇到。 学习的时候会
<property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> & ...
随机推荐
- spark 调优概述
分为几个部分: 开发调优.资源调优.数据倾斜调优.shuffle调优 开发调优: 主要包括这几个方面 RDD lineage设计.算子的合理使用.特殊操作的优化等 避免创建重复的RDD,尽可能复用同一 ...
- Ubuntu16.04 下创建新用户并赋予sudo权限
https://blog.csdn.net/wales_2015/article/details/79643336
- poj1177 Picture 矩形周长并
地址:http://poj.org/problem?id=1177 题目: Picture Time Limit: 2000MS Memory Limit: 10000K Total Submis ...
- C# static的用法详解
C# static的用法详解 有的东西你天天在用,但未必就代表你真正了解它,正如我之前所了解的 static . 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 n ...
- js动态创建Form表单并提交
javascript动态创建Form表单和表单项,然后提交表单请求,最后删除表单,代码片段如下(Firefox测试通过): var dlform = document.createElement('f ...
- spring整合ehcache 注解实现查询缓存,并实现实时缓存更新或删除
写在前面:上一篇博客写了spring cache和ehcache的基本介绍,个人建议先把这些最基本的知识了解了才能对今天主题有所感触.不多说了,开干! 注:引入jar <!-- 引入ehcach ...
- Windows Shell编程之如何编写为文件对象弹出信息框的Shell扩展
有关COM编程资料 转载:http://www.cnblogs.com/lzjsky/archive/2010/11/22/1884702.html 活动桌面引入一项新特性, 当你在某些特定对象上旋停 ...
- windows系统中 利用kibana创建elasticsearch索引等操作
elasticsearch之借用kibana平台创建索引 1.安装好kibana平台 确保kibana以及elasticsearch正常运行 2.打开kibana平台在Dev Tools 3.创建一个 ...
- Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】
本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主: ...
- anaconda + tensorflow +ubuntu 超级菜鸟,大家多指正【转】
本文转载自:https://blog.csdn.net/zzw000000/article/details/51203331 1.首先安装Anaconda 下载linux对应的anaconda版本,下 ...