多语言展示
当前在线:1714今日阅读:172今日分享:19

迭代器接口和迭代器

SPL迭代器接口的柞用在于帮助实现高级的迭代算法,允许为类创建精巧的数据访问方法。
方法/步骤
1

迭代器接口和迭代器    SPL迭代器接口的柞用在于帮助实现高级的迭代算法,允许为类创建精巧的数据访问方法。这些接口形成了创建迭代器类的基础。可以直接实现这些接口去创建所需的迭代器,不过,SPL扩展定义了更多的内置迭代器类,以完成最普通的迭代任务,我们先了解这些接口 ,然后再探讨其中一些内置的类。迭代器接口    SPL提供了5个迭代器接口:Traversable、Iterator、IteratorAggregate、OuterIterator和RecursiveIterator以下将介绍这些接口。

2

Traversable接口实际上不是一个接口,更像是一个特性。这是因为只有内部的类〔也就是用C语言编写的类)才可以直接实现Traversable接口。任何需要实现Traversable接口的用户自定义类都必须通过实现从Traversable接口派生的用户自定义接口来做到这一点。    有两个派生自Traversable接口的基础级别的类,它们才是你的}对象可以访问的接口 ,即Iterator接口和IteratorAggregate接口。通过实现这两个接口之一,对象就可以                            和foreach语句一起使用了

3

Iterator    Iterator接口,它的主要用途是允许一个类实现一个基本的迭代功能,从而使它可以被循环访问,根据键值来访问以及回滚。要记住它包含了5个方法:rewind()、current()、key(),next()和valid()。

4

IteratorAggregate    IteratorAggregate 接口是用将Iterator接口要求实现的5个迭代器方法委托给其他类的。这让你可以在类的外部实现迭代功能.并允许重新使用常用的迭代器方法,而不是在编写的每个可迭代类中重复使用这些方法    如果用PHP来编写IteratorAggregate接口,这个接口将拥有以下定义:   Interface IteratorAggregate extends Traversable{    Function getIterator();}    实现getIterator方法时,必须返回一个实现了Iterator接口的类的实例。通常在getIterator()方法内部,你会把类的信息传递给一个特殊的迭代器类的构造函数。这个数据可能是一个基础数组或者任何能够想到的其他数据,只要它足够控制5个Iterator方法即可。    SPL提供了些专门用来与IteratorAggregate接口一起使用的内置迭代器。使用这些迭代器意味着只需要实现一个方法并实例化一个类就可以使对象可迭代访问了。ArrayIterator接口和IteratorAggregate接口一起使用的效果。

5

outerIterator    有时,将一个或多个迭代器包裹在另外一个迭代器中是很有用的,例如,在你希望按顺序迭代访问几个不同的迭代器时。对于这一用途而言,可以使用OuterIterator接口    OuterIterator接口的定义如下。   Interface OuterIterator extends Iterator{   Function getInnerIterator();}    这个接口与IteratorAggregate接口的区别在于它扩展了Iterator接口,因此所有实现它的类都必领实现Iterator接口定义的所有方法。    getInnerIterator()方法应该返回当前正在这代访问的迭代器。例如,当两个或者更多的迭代器被添加在一起并且一个接一个地迭代访问时,随着数组指针通过next()方法不断增加,getInnerIterator()方法必须返回第一个迭代器,然后是第二个,以此类推。

6

这一接口形成了其他几个更加专用的迭代器的基础接口,其中包括AppendIterator、CachingIterator、FileterIterator、IteratorIterator、LimitIterator和RecursiveIteratorIterator接口.  RecursiveIterator    RecursiveIterator接口的作用在于提供了递归迭代访问功能。这种类型的迭代器接口可以表达一个树形的数据结构,其中包含了节点元素和叶子元素或者父元素和子元素。目录就是一个递归结构的例子。   RecursiveIterator接口的定义如下。 Interface RecursiveIterator extends Iterator{  Function hasChildren();  Function getChildren();}    所有的递归函数〔调用有身的函数)都必须具有这样的功能,即决定是要继续递归操作,还是停止递归并返回到调用栈的顶部。hasChildren()方法提供了实现这一判断条件的功能。如果迭代器拥有子元索getChildren()方法将会被调用,并且它应该返回子元素的一个迭代器实例。

推荐信息