SPL之Iterator(迭代器)接口
前言:SPL是用于解决典型问题(standard problems)的一组接口与类的集合。
- <?php
- /**
- * Class MyIterator
- * 在 PHP 中,通常情况下遍历数组使用 foreach 来遍历。
- * Iterator 接口,只要实现了这个接口,对象就可以通过 foreach 来迭代
- * foreach对象时,依次调用:
- * rewind() 重置到第一个元素
- * valid() 检查当前位置是否有效
- * current() 返回当前元素
- * key() 返回当前元素的键
- * next() 指向下一个元素
- */
- class MyIterator implements Iterator
- {
- private $arr;
- private $position;
- public function __construct(Array $arr)
- {
- $this->arr = $arr;
- $this->position = 0;
- }
- // 3、返回当前值
- public function current()
- {
- // TODO: Implement current() method.
- var_dump(__METHOD__);
- return $this->arr[$this->position];
- }
- // 5、把数组指针往下移
- public function next()
- {
- // TODO: Implement next() method.
- var_dump(__METHOD__);
- ++$this->position;
- }
- // 4、返回当前值的下标, 返回键名
- public function key()
- {
- // TODO: Implement key() method.
- var_dump(__METHOD__);
- return $this->position;
- }
- // 2、验证下标的值是否存在,存在则继续往下走 返回布尔值
- public function valid()
- {
- // TODO: Implement valid() method.
- var_dump(__METHOD__);
- return isset($this->arr[$this->position]);
- }
- // 1、重置数组的指针
- public function rewind()
- {
- // TODO: Implement rewind() method.
- var_dump(__METHOD__);
- }
- }
- $data = ['tom', 18, 'man'];
- $my = new MyIterator($data);
- echo '<pre>';
- foreach ($my as $k => $v){
- echo '<b>'.$k. ' => '.$v. '</b> ';
- }
- 运行:
- string(18) "MyIterator::rewind"
- string(17) "MyIterator::valid"
- string(19) "MyIterator::current"
- string(15) "MyIterator::key"
- 0 => tom string(16) "MyIterator::next"
- string(17) "MyIterator::valid"
- string(19) "MyIterator::current"
- string(15) "MyIterator::key"
- 1 => 18 string(16) "MyIterator::next"
- string(17) "MyIterator::valid"
- string(19) "MyIterator::current"
- string(15) "MyIterator::key"
- 2 => man string(16) "MyIterator::next"
- string(17) "MyIterator::valid"
SPL之Iterator(迭代器)接口的更多相关文章
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- java基础(18):集合、Iterator迭代器、增强for循环、泛型
1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...
- Collection接口【集合】和Iterator迭代器类
1.1集合的概述 前面基础学习并使用过集合ArrayList<E>,那么集合究竟是什么呢? 集合:集合是Java中提供的一种容器,可以用来存储多个数据. 那么意思就是说集合是容器,但是容器 ...
- Java—包装类/System类/Math类/Arrays类/大数据运算/Collection接口/Iterator迭代器
基本类型包装类 8种基本类型对应的包装类如: 将字符串转成基本类型: 将基本数值转成字符串有3种方式: 基本类型直接与””相连接即可:34+" " 调用String的valueOf ...
- 设计模式(十五):Iterator迭代器模式 -- 行为型模式
1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...
- 【转】Java学习之Iterator(迭代器)的一般用法 (转)
[转]Java学习之Iterator(迭代器)的一般用法 (转) 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭 ...
- C#:iterator 迭代器/partial class 分布类/泛型
C#:iterator 迭代器/partial class 分布类/泛型 iterator 迭代器 写个最简单的迭代,(迭代一个字符串数组): 1.实现接口中的方法: 1 using System; ...
- [设计模式] Iterator - 迭代器模式:由一份奥利奥早餐联想到的设计模式
Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...
- Collection<E>、Iterable<T>和Iterator<E>接口
Collection接口 public interface Collection<E>extends Iterable<E> Collection接口主要包含以下方法: Ite ...
- [C# 设计模式] Iterator - 迭代器模式:我与一份奥利奥早餐的故事
Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...
随机推荐
- P3899 [湖南集训]谈笑风生
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3653 https://www.luogu.org/problemnew/show/P38 ...
- SpringBoot 读取properties配置文件 @Value使用 中文乱码问题
一,idea中配置文件中文乱码问题 使用idea开发,读取properites配置文件 配置: #app 菜单 #没有限制,所有人都可访问的菜单 menu.unlimited=订单审批,现场尽调,合作 ...
- (转)tomcat架构&session共享
(二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomc ...
- P2633 Count on a tree
思路 运用树上差分的思想,转化成一个普通的主席树模型即可求解 代码 #include <cstdio> #include <algorithm> #include <cs ...
- Component 初识组件
component组件是Vue学习的重点.重点.重点,重要的事情说三遍.所以你必须学好Vue component.其实组件就是制作自定义的标签,这些标签在HTML中是没有的.比如:<diy> ...
- (转载)c# winform 窗体起始位置 设置
窗体起始位置为顶部中间,WinForm居中显示: ; ; this.StartPosition = FormStartPosition.Manual; //窗体的位置由Location属性决定 thi ...
- .Net Core Package lose or not match
错误.警告的说明: 示例一: 严重性:警告 代码:MSB3106 说明 :程序集强名称“C:\Users\$(computerName)\.nuget\packages\$(packageName)\ ...
- 无法获取未定义或 null 引用的属性“contentWindow”
在iframe 中有时候 这样使用contentWindow 会报 无法获取未定义或 null 引用的属性“contentWindow” 这种情况 我是在IE中遇到 其他浏览器一切正常. pa ...
- linux中date命令显示
1. date用来显示具体的日期和24进制的时间 [jasmine.qian@ ~]$ date Fri Jan 25 14:17:17 CST 2019 [jasmine.qian@ ~]$ dat ...
- [转][linux]简单的linux下的tcp/udp
转自:https://blog.csdn.net/cabing2005/article/details/53068880 详细函数以及参数解释请看原链接. windows下的tcp/udp参考:htt ...