手机版

PHP设计模式中迭代器模式的深入分析

时间:2021-11-19 来源:互联网 编辑:宝哥软件园 浏览:

迭代器模式,它在一个非常常见的过程中提供了一个抽象:位于对象图未知部分的一组对象(或标量)的迭代。有几种特定的迭代方法:迭代数组属性、集合对象、数组,甚至查询结果集。在对象世界中,迭代器模式应该保持类似数组的功能,并被视为一个非侵入式的对象方面。客户端类通常与实对象实现分离,实对象实现指的是迭代器接口。只要有可能,我们可以发送一个对迭代器的引用来替换将来可能改变的具体或抽象类。

参与者:客户端:引用迭代器模式的方法对一组值或对象执行循环。迭代器:迭代过程中的抽象,包括next(),isFinished(),current()等方法。具体迭代器:对特定的对象集进行迭代,如数组、树、组合、集合等。通过Traversable接口,PHP最初支持迭代器模式,通过迭代器和IteratorAggregate进行扩展。这两个子接口不仅定义了一套标准的方法,而且每个Traversable对象都可以原封不动地传递给foreach(),foreach是迭代器的主客户端。迭代器实现是一个真正的迭代器,而IteratorAggregate是一个具有其他职责的可遍历对象,它通过getIterator()方法返回一个迭代器。

标准服务器端编程语言(专业超文本预处理器的缩写)库是服务器端编程语言(专业超文本预处理器的缩写)中绑定的唯一通用目的面向对象库,定义了额外的接口和公用类外部迭代器实现装饰一个迭代器和极限迭代器是这个接口的两个例子递归生成器是迭代程序接口为树形结构实现的一个扩展,它定义了一组额外的方法检查迭代中当前元素的子对象是否存在递归递归迭代程序和递归目录生成器是这个接口的实现示例,这些类型的迭代器可以原样使用,或是用一个递归编辑器桥接到一个普通的迭代器契约。这个外部迭代器实现将会根据构造参数执行深度优先或广度优先遍历。使用递归编辑器时,可以将其传递给foreach,请看后面的代码示例,了解递归编辑器的不同用法和它们的超集迭代器。最后,可查找的连接符向契约添加了一个seek()方法,它可以用于移动迭代程序的内部状态到一个特定的迭代点。注意,迭代器是比对象集更好的抽象,因为我们可以让无限迭代器等,不用与普通数组阵列一致,因此迭代器缺少计数()函数等功能。在服务器端编程语言(专业超文本预处理器的缩写)官方手册中可以找到完整的声压级迭代器列表。得益于对服务器端编程语言(专业超文本预处理器的缩写)的强力支持,使用迭代器模式的大部分工作都包括在标准实现中,下面的代码示例就利用了标准迭代程序和递归编辑器的功能。复制代码代码如下:php /** *包装数字数组的集合。*实现迭代器接口需要所有五个公共方法*/类集合实现迭代器{ private $ _ content private $ _ index=0;public function _ _ construct(array $ content){ $ this-_ content=$ content;} public function rewind(){ $ this-_ index=0;} public function valid(){ return isset($ this-_ content[$ this-_ index]);} public function current(){ return $ this-_ content[$ this-_ index];} public function key(){ return $ this-_ index;} public function next(){ $ this-_ index;} } $array=array('A ',' B ',' C ',' D ');回显”集合:”;foreach(新集合($array)为$ key=$ value){ echo ' $ key=$ value ';}回显\ n ';/** *通常迭代聚合是要实现的接口。*它只有一个方法,这个方法必须返回一个已经被定义为另一个类的迭代器*(例如数组运算符)*迭代器对算法有更好的控制,*因为迭代器契约*的所有钩子点都可以实现*/类别号设置实现IteratorAggregate { private $ _ content;public function _ _ construct(array $ content){ $ this-_ content=$ content;}公共函数包含($ number){ return in _ array($ number,$ this-_ content);} /** *实现迭代聚合只需要这个方法* @ return Iterator */public function getIterator(){ return new ArrayIterator($ this-_ content);} }回显"编号sset : ";foreach(新数字sset($ array)为$ key=$ value){ echo ' $ key=$ value .}回显\ n ';//我们来玩递归运算符实现$ it=新递归数组运算符(数组(' A ',' B '、数组(' C ',' D ')、数组(数组(' E ',' F ')、数组(' G ',' H ',' I '))));//$它是一个递归运算符,但也是一个迭代器,//因此它通常在数组的四个元素//上循环。回声"递归调用器上的foreach :”;foreach($ it as $ value){ echo $ value;//但是递归编辑器指定了其他//方法来探索子节点$children=$it-hasChildren()?"{是} ' : ' {否} ';echo $ children“”;}回显\ n ';//我们可以通过//一个递归运算符将它连接到一个不同的契约,它的隐晦名称//应该被理解为"一个跨越//一个递归运算符的迭代器"。回声"递归调用器上的foreach :”;foreach(新recursiveiteratorator)为$ value){ echo $ value;}回显\ n ';

版权声明:PHP设计模式中迭代器模式的深入分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。