博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP设计模式(6)迭代器模式
阅读量:6198 次
发布时间:2019-06-21

本文共 1986 字,大约阅读时间需要 6 分钟。

迭代器(Iterator)模式,在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代。

迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代。

在PHP官方手册中可以找到完整的SPL迭代器列表。得益于对PHP的强力支持,使用迭代器模式的大部分工作都包括在标准实现中,下面的代码示例就利用了标准Iterator的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
//定义一个类,实现了Iterator的方法
class 
testIterator 
implements 
Iterator {
private 
$_content
;
private 
$_index 
= 0;
//构造函数
public 
function 
__construct(
array 
$content
) {
$this
->_content = 
$content
;
}
//返回到迭代器的第一个元素
public 
function 
rewind
() {
$this
->_index = 0;
}
//检查当前位置是否有效
public 
function 
valid() {
return 
isset(
$this
->_content[
$this
->_index]);
}
//返回当前元素
public 
function 
current() {
return 
$this
->_content[
$this
->_index];
}
//返回当前元素的键
public 
function 
key() {
return 
$this
->_index;
}
//向前移动到下一个元素
public 
function 
next() {
$this
->_index++;
}
}
//定义数组,生成类时使用
$arrString 
array
(
'jane'
,
'apple'
,
'orange'
,
'pear'
);
$testIterator 
new 
testIterator(
$arrString
);
//开始迭代对象
foreach 
$testIterator 
as 
$key 
=> 
$val 
) {
echo 
$key 
'=>' 
$val 
'<br>'
;
}

运行可以看到如下结果:

1
2
3
4
0=>jane
1=>apple
2=>orange
3=>pear

如果有兴趣,可以在每一个函数里面开始处加上“var_dump(__METHOD__);”,这样就可以看到每个函数的调用顺序了,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
string(25) 
"testIterator::__construct"
string(20) 
"testIterator::rewind"
string(19) 
"testIterator::valid"
string(21) 
"testIterator::current"
string(17) 
"testIterator::key"
0=>jane
string(18) 
"testIterator::next"
string(19) 
"testIterator::valid"
string(21) 
"testIterator::current"
string(17) 
"testIterator::key"
1=>apple
string(18) 
"testIterator::next"
string(19) 
"testIterator::valid"
string(21) 
"testIterator::current"
string(17) 
"testIterator::key"
2=>orange
string(18) 
"testIterator::next"
string(19) 
"testIterator::valid"
string(21) 
"testIterator::current"
string(17) 
"testIterator::key"
3=>pear
string(18) 
"testIterator::next"
string(19) 
"testIterator::valid"
本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1344851
,如需转载请自行联系原作者
你可能感兴趣的文章
[译] 为用户提供安全可靠的体验
查看>>
Google API设计指南-资源名称
查看>>
最全React技术栈技术资料汇总(收藏)
查看>>
道德迷宫,不该成为无人驾驶发展的拦路虎!
查看>>
阿里AI界的新伙伴,1秒钟自动生成20000条文案
查看>>
bat文件的一些小技巧
查看>>
通过DBCC PAGE查看页信息验证聚集索引和非聚集索引节点信息
查看>>
第一章:nginx环境搭建
查看>>
CSS 三栏布局之圣杯布局和双飞翼布局
查看>>
【FFmpeg笔记】 从零开始之滤镜
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
django集成已有的数据库和应用
查看>>
flex 学习笔记 stage
查看>>
ESXI 6.0正式版官网下载地址
查看>>
理解<base href="<%=basePath%>">
查看>>
linux 磁盘自动化监控
查看>>
硅谷正在泡沫中,以及什么会刺破它?
查看>>
使用硬盘,安装双系统,Win7+CentOS
查看>>
linux路由管理--专题
查看>>
桌面图标有蓝色阴影
查看>>