PHP设计模式中PHP迭代器模式的说明
迭代器,有时称为游标,是一种软件设计的编程模式,可以通过容器对象(如列表或向量)进行访问。设计者不需要关心容器对象的内容。
各种语言以不同的方式实现迭代器。Java、C #、Python、Delphi等一些面向对象语言都将Iterator的特性内置到语言中,与语言完美融合。我们称之为隐式迭代器。但是,比如C并不具备迭代器本身的特性,但是STL还是用模板实现了一个强大的迭代器。
PHP5开始支持接口,并且内置迭代器接口,所以如果定义一个类并实现迭代器接口,那么你的类对象就是ZEND_ITER_OBJECT,否则就是ZEND_ITER_PLAIN_OBJECT。
对于类ZEND_ITER_PLAIN_OBJECT,foreach通过HASH_OF获取对象的默认属性数组,然后对数组进行foreach。
让我们首先来看迭代器的定义,也就是说,提供一种方法来按顺序访问聚合对象中的元素,而不暴露对象的内部显示。它可以帮助构造特定的对象,这些对象可以提供单个标准接口来循环或迭代任何类型的可计数数据。让我们看看迭代器模式的结构图:
让我们看看迭代器需要使用的内部方法:
迭代器: current-return当前元素return当前元素迭代器:3360 key-return当前元素迭代器的:3360 ne Xt向前移动到下一个元素移动到下一个元素迭代器:3360 back-将迭代器倒回到第一个元素并返回到第一个元素迭代器: valid-ches I . F当前位置是否有效检查当前位置的有效性,对于
?php/***迭代器模式的简单实现类*/类示例实现迭代器{ private $ _ itemspublic function _ _ construct($ data){ $ this-_ items=$ data;} public function current(){ return current($ this-_ items);} public function next(){ next($ this-_ items);}公共功能键(){返回键($ this-_ items);}公共函数rewind(){ reset($ this-_ items);} public function valid(){ return($ this-current()!==FALSE);}}/** DEMO */$data=array(1,2,3,4,5);$sa=新样本($ data);foreach($ sa AS $ key=$row){ echo $ key ' ',$ row,' br/';}?举一些迭代器使用范围的例子:
当使用返回迭代器的包或库时(例如PHP5中的SPL迭代器),当容器的所有元素都在一次调用中获得时,不可能处理大量的原始时间(数据库中表的GB数据).
不同的迭代器有不同的接口。例如,PHP SPL迭代器包括Next()(移动到下一个元素)、correct()(返回当前元素)、valid()(检查迭代结束)、rewind()(从头重新开始)和key()(返回当前元素的索引)。当然,您可以编写自己的迭代器,或者在系统中使用迭代器。
通常,foreach用于使用迭代器,下面的代码被整理出来:
?php类示例实现Iterator { private $ _ items=array(1,2,3,4,5,6,7);public function _ _ construct(){;//void }公共函数rewind(){ reset($ this-_ items);} public function current(){ return current($ this-_ items);}公共功能键(){返回键($ this-_ items);} public function next(){ return next($ this-_ items);} public function valid(){ return($ this-current()!==false);}}$sa=新示例();foreach($ sa as $ key=$ val){ print $ key。'=' .$ val}?while循环还可以:
?phpwwhile($ iterator-valid()){//确定是否是最后一个元素$ element=$ iterator-current();//获取当前元素$ iterator-next();//移动到下一个元素}?为什么要学习PHP的迭代器?有一个很重要的原因:使用PHP的迭代器可以通过使用面向对象的方法实现常见的数据结构,如列表、堆栈、队列和图形。后面我们会做一个专题,用PHP实现大部分的数据结构,并且以面向对象的形式。所以在这里,我们预热一下PHP的迭代器。
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接
版权声明:PHP设计模式中PHP迭代器模式的说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。