PHP设计模式(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"
|
PHP设计模式(6)迭代器模式相关推荐
- 【GOF23设计模式】迭代器模式
[GOF23设计模式]迭代器模式 来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_迭代器模式.JDK内置迭代器.内部类迭代器 1 package com.test.it ...
- [转载] Python进阶:设计模式之迭代器模式
参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...
- 每日学一个设计模式1——迭代器模式
引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...
- php迭代器实例,php设计模式之迭代器模式实例分析【星际争霸游戏案例】
本文实例讲述了php设计模式之迭代器模式.分享给大家供大家参考,具体如下: 星际的任务关一般会有这样的设定:一开始电脑的农民不采矿,如果战斗打响,或者玩家造出第一个兵,电脑的农民开始采矿. 我们自然会 ...
- 设计模式之迭代器模式(Iterator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式复习-迭代器模式
Iterator.H #pragma once #include <list> #include <windows.h> using namespace std;/* 设计模式 ...
- php foreach 循环 判断index 小于多少_PHP设计模式之迭代器模式 - 硬核项目经理
一说到这个模式,就不得不提循环语句.在<大话设计模式>中,作者说道这个模式现在的学习意义更大于实际意义,这是为什么呢?当然就是被foreach这货给整得.任何语言都有这种类似的语法可以方便 ...
- Java 设计模式之迭代器模式
一.了解迭代器模式 1.1 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和 ...
- 设计模式:迭代器模式(Iterator)
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- Android设计模式之——迭代器模式
一.介绍 迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一.迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如Java中的List.Map ...
最新文章
- iOS-应用沙盒结构分析
- Logstash 参考指南(使用Filebeat Modules配置示例)
- 一个关于NHiberante,Linq数据源与UI交互引发的思考
- 两个点击事件共用一个方法_工作必技:教你简单方法一个电脑开两个,多个微信!...
- codeforces 650B - Image Preview
- java接口抽象方法_Java 接口 抽象类 抽象方法
- hitchhiker部署_《 Hitchhiker的Python机器学习指南》
- 如何在验证集加噪声_图像去噪:如何去其糟粕,取其精华?
- 周刷题第一期总结(two sum and two numbers)
- Z逆变换(2020.10.21)
- hibernate之多对多配置
- 用matlab产生chu序列和frank序列
- 【Wi-Fi】IEEE 802.11 Standards 之 802.11a/b/g/n/ac/ax初探
- 应运而生的环保APP
- H5接入支付流程-微信支付支付宝支付
- 电脑蓝屏c000021a代码错误
- iOS-Charts图表绘制一块平行X轴线性指标
- 计算机键盘清洗怎么弄,笔记本电脑键盘怎么清洗干净(专业户教你清洗键盘简易方法)...
- 2018年终总结之最有成就感的几件事
- 【axios源码】- 取消请求cancel模块研读解析
热门文章
- lua 初接触 --- The first time use Lua for programing
- ewebeditor在上传文件时,总是提示“请选择一个有效的文件”,
- RedHat 5.4 RHCE VSFTPD学习笔记
- DHCP详细配置实验总结
- Linux能否靠架构取得胜利
- 18/100. Path Sum III
- 关于301跳转的多种办法
- 日志分割工具cronolog
- spring整合activeMQ遇到异常:Error creating bean with name 'connectionFactory'
- CSS文本对齐text-align详解