迭代器接口IteratorAggregate 与类 ArrayIterator(转)
也许你很想使用foreach来遍历一个类中的属性,然而你却没有很好的方式来这么做。可能使用PHP中class的操作的方式能够帮助你实现一些,但是现在我想你有了更好的方式。通过继承接口:IteratorAggregate来实现。
示例
- <?php
- /**
- * 测试接口的使用
- *
- * @author monkee
- * @since 2011-08-15
- */
- class myData implements IteratorAggregate {
- public $property1 = "Public property one";
- public $property2 = "Public property two";
- public $property3 = "Public property three";
- public function __construct() {
- $this->property4 = "last property";
- }
- public function getIterator() {
- return new ArrayIterator($this);
- }
- }
- $obj = new myData;
- foreach($obj as $key => $value) {
- echo $obj->$key;
- echo "\n";
- }
- ?>
以上示例来自于PHP5.3手册
interface IteratorAggregate
IteratorAggregate是一个接口,通过对它的继承,你可以使用迭代器来对类里的pulibc属性进行操作。它只有一个接口方法,如下:
- IteratorAggregate implements Traversable {
- abstract public Traversable getIterator ();
- }
通过返回数组迭代类来实现。
ArrayIterator类
ArrayIterator是SPL中Iterator中的一个类,它将对象或数组封装为一个可以通过foreach来操作的类。
- <?php
- /**
- * 测试接口的使用
- *
- * @author monkee
- * @since 2011-08-15
- */
- class testClass{
- public $a, $b, $c;
- public function __construct($a, $b, $c){
- list($this->a, $this->b, $this->c) = array($a, $b, $c);
- }
- }
- $arrayObj = new ArrayIterator(array(
- 'a' => 'A',
- 'b' => 'B',
- 'c' => 'C'
- ));
- foreach($arrayObj as $key => $value){
- echo $arrayObj[$key];
- }
- $newObj = new testClass('A', 'B', 'C');
- $classObj = new ArrayIterator($newObj);
- foreach($classObj as $key => $value){
- echo $classObj[$key];
- }
- ?>
它的定义如下:
- ArrayIterator implements Iterator , Traversable , ArrayAccess , SeekableIterator , Countable {
- mixed current ( void )
- mixed key ( void )
- void next ( void )
- void rewind ( void )
- void seek ( int $position )
- bool valid ( void )
- }
迭代器接口IteratorAggregate 与类 ArrayIterator(转)相关推荐
- set删除一个元素时间复杂度_set/map接口及其实现类
---------------[ 感谢小郡提供的图片] 1.Map接口/Hashtable.HashMap.TreeMap实现类 Hashtable.HashMap.TreeMap 都是最常见的一些 ...
- java集合——集合接口+迭代器接口
[0]README 0.1) 本文描述转自 core java volume 1, 源代码 diy 的, 旨在理解 java集合框架--集合接口+迭代器接口 的相关知识: 0.2) for full ...
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...
- Collection集合类和Map接口各实现类详解
Java的集合类(collection接口和Map) 一.集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长 ...
- Collection集合接口及其子接口、实现类
1. Collection 接口简介 2. Collection的子接口 2.1 List接口 List接口的实现类 ① ArrayList ② Vector ③ Stack ④ LinkedList ...
- 零基础学Java_Map接口、HashMap 类、HashTable 类、TreeMap 类(整理总结)
文章目录 一.集合的框架体系 1. 常用集合接口概述 2. 常用 Collection 集合的实现子类 3. 常用的 Map 图的实现子类 二.Map 接口 1. Map 接口的特点 2. Map 图 ...
- Java-----Set接口与实现类
Set接口与实现类 Set子接口 特点:无序.无下标.元素不可重复. 方法:全部继承自Collection中的方法. Set实现类 HashSet[重点]: 基于HashCode实现元素不重复. 当存 ...
- java面向对象 接口和实现类_类实现java面向对象上:接口
最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--类实现 10.接口: 接口的设计: 1.应用接口处理多继承: 2.应用接口为外部类添加功能: ...
- 深入struts2.0(七)--ActionInvocation接口以及3DefaultActionInvocation类
1.1.1 ActionInvocation类 ActionInvocation定义为一个接口.主要作用是表现action的运行状态.它拥有拦截器和action的实例.通过重复的运行inv ...
最新文章
- python编程在哪里写程序-第一个Python程序——在屏幕上输出文本
- ECshop商城程序常见的96个小问题汇总
- LeetCode 30串联所有单词的子串31下一个排列
- 第十三章:位图(五)
- gnutls_handshake() failed: Illegal parameter
- css新单位 vw , vh
- 黄章爆料魅族16s/16s Plus更多信息 无线充电已做到24W
- android 判断service是否开启
- C++概述部分内容记录
- 电子技术基础(三)__具有无关项逻辑函数的化简
- RJ45接口定义及网线线序
- 【致远FAQ】致远OA启动不起来了(下集)
- web网页设计制作成品 ——服装明星主页(7页) 表格带留言板带音乐HTML+CSS+JavaScript
- 大数据导论(二:大数据的架构)
- 一位农村妇女被渣男抛弃之后,竟然……
- vue实现在线编辑excel(转)
- 国庆放假前一周,再学这些技术,安安稳稳过假期
- MCE公司:M525-针对混合谱系白血病(MLL)的新型抑制剂
- Zuul动态路由及动态Filter实现
- SinuTrain for SINUMERIK 仿真西门子最新版仿真软件
热门文章
- Android定制:修改开机启动画面
- ASP.NET页面之间传递值的几种方式
- 如何重构“箭头型”代码
- Unity接入安卓sdk查看应用内存占用
- jQuery选择器总结
- Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...
- String.format()【演示具体的例子来说明】
- 每日英语:China's Labor Market Tightens
- robots.txt文件的解析及过滤
- ORA-01113 file 1 needs media recovery