`
zhengdl126
  • 浏览: 2513144 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

实现Iterator接口

    博客分类:
  • php
PHP 
阅读更多

使对象可以像数组一样进行foreach循环,要求属性必须是私有。

 

 

<?php
class MyIterator implements Iterator
{
     private $var = array();

     public function __construct($array)
     {
         if (is_array($array)) {
            $this->var = $array;
         }
     }

     public function rewind() {
         echo "rewinding\n";
        reset($this->var);
     }

     public function current() {
        $var = current($this->var);
         echo "current: $var\n";
         return $var;
     }

     public function key() {
        $var = key($this->var);
         echo "key: $var\n";
         return $var;
     }

     public function next() {
        $var = next($this->var);
         echo "next: $var\n";
         return $var;
     }

     public function valid() {
        $var = $this->current() !== false;
         echo "valid: {$var}\n";
         return $var;
     }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach ($it as $a => $b) {
     print "$a: $b\n";
}

/*          
输出:
rewinding
current: 1
valid: 1
current: 1
key: 0
0: 1
next: 2
current: 2
valid: 1
current: 2
key: 1
1: 2
next: 3
current: 3
valid: 1
current: 3
key: 2
2: 3
next:
current:
valid:

*/
?>

 

 

 

迭代器有一个简单的和经常被看到的接口

 

<?php
   function Iterator($array) // Constructor. Takes array to be traversed as a parameter. 构造函数。
使需要遍历的数组作为一个参数
   function reset() // Sets internal pointer to the first element 设置内部指针指向第一个元素
   function end() // Sets internal pointer to the last element 设置内部指针指向最后一个元素
   function seek($position) // Sets internal pointer to desired position 设置内部指针指向一个指定的元素
   function next() // Returns next element in the iteration 返回后一个元素
   function previous() // Returns previous element in the iteration 返回前一个元素
 ?>
分享到:
评论

相关推荐

    Java Iterator接口实现代码解析

    主要介绍了Java Iterator接口实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java设计模式之Iterator模式

    所谓Iterator模式,即是...3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的函数

    【JDK1.8源码剖析】外部迭代器Iterator接口

    其迭代行为可以挂载到待比较对象的外部, 此外,外部迭代器往往用来支撑内部迭代器的实现。 注意区别于内部迭代器Iterable和枚举器Enumeration 外部迭代器的设计背后体现着迭代器设计模式的思想 (二)源码分析 该...

    VB.NET实现IEnumerator接口

    经常会用到有类似父子关系的这个对象,比如在我现在的一个项目中,有订单对象,在一个订单下又包含多个产品,这时我就想用 Iterator模式来封装订单下的产品,在dot Net中的IEnumerator接口就是用来实现迭代的,...

    一个使用iterator和json技术的实例

    一个iterator_jsonDemo. 1.通过iterable接口和iterator实现迭代输出。2.通过JSONArray实现输出(自带json相关jar包)。供参考。

    Java系列Iterator

    Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。 ———————————————— 版权声明:本文为CSDN博主「网络冒险家」的原创文章,遵循CC 4.0 BY...

    PHP5.5新特性之yield理解与用法实例分析

    yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。 yield生成器允许你 在 foreach 代码块中写代码来迭代一组...

    PHP7 新特性详细介绍

    就想总结一下,一些可能会用到的新特性。...通过添加 yield 关键字支持了 generators,Generators 提供了一个更简单的方法实现迭代器,不需要实现 Iterator 接口。 &lt;?php function xrange($start, $limit, $step

    php使用yield对性能提升的测试实例分析

    生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会...

    Java集合Iterator迭代的实现方法

    主要介绍了Java集合Iterator迭代接口的实现方法,非常不错,具有参考借鉴家,对Java 结合iterator知识感兴趣的朋友一起看看吧

    迭代器模式(Iterator Pattern)原理图

    具体迭代器(Concrete Iterator):实现迭代器接口,对聚合对象进行遍历。 聚合对象(Aggregate):定义创建迭代器对象的接口。 具体聚合对象(Concrete Aggregate):实现聚合对象的接口,返回具体迭代器对象。 ...

    implementation-iterator:迭代 PSR-4 兼容目录以实现类接口

    该库为符合 PSR-4 的文件夹结构创建迭代器,并在其中搜索接口/类的所有实现/扩展。 抽象实现和类本身将被忽略。 用法 $ iterator = new \ Scheb \ ImplementationIterator ( "src/" , "Root\Namespace" , "Some\...

    Java源码分析:深入探讨Iterator模式

    下面我们先简单讨论一个根接口Collection,然后分析一个抽象类AbstractList和它的对应Iterator接口,并仔细研究迭代子模式的实现原理。 本文讨论的源代码版本是JDK 1.4.2,因为JDK 1.5在java.util中使用了很多泛型...

    Java Iterator(迭代器)

    Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。 迭代器 it 的两个基本操作是 next 、hasNext 和 remove。 调用 it.next() 会返回迭代器的下一个元素,...

    PHP聚合式迭代器接口IteratorAggregate用法分析

    分享给大家供大家参考,具体如下: ...实现getIterator方法时必须返回一个实现了Iterator接口的类的实例。 例子说明: &lt;?php /** * 利用聚合式迭代器,并返回一个实现了Iterator接口的类的实例 *

    PHP检测接口Traversable用法详解

    Traversable用于检测一个类是否可以使用 foreach 进行遍历,这是一个无法在 PHP 脚本中实现的内部引擎接口,实际编程中我们使用Iterator接口或者IteratorAggregate接口来实现遍历。 接口摘要: Traversable { } ...

    array-abstraction:实现 ArrayAccessIteratorCountable 接口的本机数组和对象的抽象

    实现 ArrayAccess/Iterator/Countable 接口的内置数组和对象的抽象。 这个库旨在抽象出 PHP 内置数组和不同接口对象之间的差异,可以实现以挂钩到数组语法。 PHP 有许多用于数组的内置函数,但它们只适用于内置...

    set.list.map接口

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2.List(列表&lt;接口&gt;)以线性方式存储,有序,允许重复主要实现类有LinkList(采用链表数据结构)和ArrayList(代表可大可小的数组) Eg: ...

    VisitorPattern:CS100 Lab8-使用Visitor模式和Iterator模式的操作数计数器的实现

    迭代器:这是用于定义所有其他迭代器类的接口的基类 NullIterator:此迭代器由表达式树类创建,该表达式树类没有要迭代的子级(例如操作数) BinaryIterator:此迭代器由具有两个子代(例如运算符)的表达式树类...

Global site tag (gtag.js) - Google Analytics