也许你很想使用foreach来遍历一个类中的属性,然而你却没有很好的方式来这么做。可能使用PHP中class的操作的方式能够帮助你实现一些,但是现在我想你有了更好的方式。通过继承接口:IteratorAggregate来实现。

示例

[php] view plaincopy
  1. <?php
  2. /**
  3. * 测试接口的使用
  4. *
  5. * @author monkee
  6. * @since 2011-08-15
  7. */
  8. class myData implements IteratorAggregate {
  9. public $property1 = "Public property one";
  10. public $property2 = "Public property two";
  11. public $property3 = "Public property three";
  12. public function __construct() {
  13. $this->property4 = "last property";
  14. }
  15. public function getIterator() {
  16. return new ArrayIterator($this);
  17. }
  18. }
  19. $obj = new myData;
  20. foreach($obj as $key => $value) {
  21. echo $obj->$key;
  22. echo "\n";
  23. }
  24. ?>

以上示例来自于PHP5.3手册

interface IteratorAggregate

IteratorAggregate是一个接口,通过对它的继承,你可以使用迭代器来对类里的pulibc属性进行操作。它只有一个接口方法,如下:

[php] view plaincopy
  1. IteratorAggregate implements Traversable {
  2. abstract public Traversable getIterator ();
  3. }

通过返回数组迭代类来实现。

ArrayIterator类

ArrayIterator是SPL中Iterator中的一个类,它将对象或数组封装为一个可以通过foreach来操作的类。

[php] view plaincopy
  1. <?php
  2. /**
  3. * 测试接口的使用
  4. *
  5. * @author monkee
  6. * @since 2011-08-15
  7. */
  8. class testClass{
  9. public $a, $b, $c;
  10. public function __construct($a, $b, $c){
  11. list($this->a, $this->b, $this->c) = array($a, $b, $c);
  12. }
  13. }
  14. $arrayObj = new ArrayIterator(array(
  15. 'a' => 'A',
  16. 'b' => 'B',
  17. 'c' => 'C'
  18. ));
  19. foreach($arrayObj as $key => $value){
  20. echo $arrayObj[$key];
  21. }
  22. $newObj = new testClass('A', 'B', 'C');
  23. $classObj = new ArrayIterator($newObj);
  24. foreach($classObj as $key => $value){
  25. echo $classObj[$key];
  26. }
  27. ?>

它的定义如下:

[php] view plaincopy
  1. ArrayIterator implements Iterator , Traversable , ArrayAccess , SeekableIterator , Countable {
  2. mixed current ( void )
  3. mixed key ( void )
  4. void next ( void )
  5. void rewind ( void )
  6. void seek ( int $position )
  7. bool valid ( void )
  8. }

迭代器接口IteratorAggregate 与类 ArrayIterator(转)相关推荐

  1. set删除一个元素时间复杂度_set/map接口及其实现类

    ---------------[ 感谢小郡提供的图片] 1.Map接口/Hashtable.HashMap.TreeMap实现类 Hashtable.HashMap.TreeMap 都是最常见的一些 ...

  2. java集合——集合接口+迭代器接口

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码 diy 的, 旨在理解 java集合框架--集合接口+迭代器接口 的相关知识: 0.2) for full ...

  3. JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类

    一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...

  4. Collection集合类和Map接口各实现类详解

    Java的集合类(collection接口和Map) 一.集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长 ...

  5. Collection集合接口及其子接口、实现类

    1. Collection 接口简介 2. Collection的子接口 2.1 List接口 List接口的实现类 ① ArrayList ② Vector ③ Stack ④ LinkedList ...

  6. 零基础学Java_Map接口、HashMap 类、HashTable 类、TreeMap 类(整理总结)

    文章目录 一.集合的框架体系 1. 常用集合接口概述 2. 常用 Collection 集合的实现子类 3. 常用的 Map 图的实现子类 二.Map 接口 1. Map 接口的特点 2. Map 图 ...

  7. Java-----Set接口与实现类

    Set接口与实现类 Set子接口 特点:无序.无下标.元素不可重复. 方法:全部继承自Collection中的方法. Set实现类 HashSet[重点]: 基于HashCode实现元素不重复. 当存 ...

  8. java面向对象 接口和实现类_类实现java面向对象上:接口

    最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--类实现 10.接口: 接口的设计:        1.应用接口处理多继承:        2.应用接口为外部类添加功能:        ...

  9. 深入struts2.0(七)--ActionInvocation接口以及3DefaultActionInvocation类

    1.1.1       ActionInvocation类 ActionInvocation定义为一个接口.主要作用是表现action的运行状态.它拥有拦截器和action的实例.通过重复的运行inv ...

最新文章

  1. python编程在哪里写程序-第一个Python程序——在屏幕上输出文本
  2. ECshop商城程序常见的96个小问题汇总
  3. LeetCode 30串联所有单词的子串31下一个排列
  4. 第十三章:位图(五)
  5. gnutls_handshake() failed: Illegal parameter
  6. css新单位 vw , vh
  7. 黄章爆料魅族16s/16s Plus更多信息 无线充电已做到24W
  8. android 判断service是否开启
  9. C++概述部分内容记录
  10. 电子技术基础(三)__具有无关项逻辑函数的化简
  11. RJ45接口定义及网线线序
  12. 【致远FAQ】致远OA启动不起来了(下集)
  13. web网页设计制作成品 ——服装明星主页(7页) 表格带留言板带音乐HTML+CSS+JavaScript
  14. 大数据导论(二:大数据的架构)
  15. 一位农村妇女被渣男抛弃之后,竟然……
  16. vue实现在线编辑excel(转)
  17. 国庆放假前一周,再学这些技术,安安稳稳过假期
  18. MCE公司:M525-针对混合谱系白血病(MLL)的新型抑制剂
  19. Zuul动态路由及动态Filter实现
  20. SinuTrain for SINUMERIK 仿真西门子最新版仿真软件

热门文章

  1. Android定制:修改开机启动画面
  2. ASP.NET页面之间传递值的几种方式
  3. 如何重构“箭头型”代码
  4. Unity接入安卓sdk查看应用内存占用
  5. jQuery选择器总结
  6. Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...
  7. String.format()【演示具体的例子来说明】
  8. 每日英语:China's Labor Market Tightens
  9. robots.txt文件的解析及过滤
  10. ORA-01113 file 1 needs media recovery