PHP设计模式
行为型模式(17)迭代器模式
迭代器模式 (Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。 当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。 php标准库(SPL)中提供了迭代器接口 Iterator,要实现迭代器模式,实现该接口即可。 ```php <?php class sample implements Iterator { private $_items ; public function __construct(&$data) { $this->_items = $data; } public function current() { return current($this->_items); } public function next() { next($this->_items); } public function key() { return key($this->_items); } public function rewind() { reset($this->_items); } public function valid() { return ($this->current() !== FALSE); } } // client $data = array(1, 2, 3, 4, 5); $sa = new sample($data); foreach ($sa AS $key => $row) { echo $key, ' ', $row, '<br />'; } /* 输出: 0 1 1 2 2 3 3 4 4 5 */ //Yii FrameWork Demo class CMapIterator implements Iterator { /** * @var array the data to be iterated through */ private $_d; /** * @var array list of keys in the map */ private $_keys; /** * @var mixed current key */ private $_key; /** * Constructor. * @param array the data to be iterated through */ public function __construct(&$data) { $this->_d=&$data; $this->_keys=array_keys($data); } /** * Rewinds internal array pointer. * This method is required by the interface Iterator. */ public function rewind() { $this->_key=reset($this->_keys); } /** * Returns the key of the current array element. * This method is required by the interface Iterator. * @return mixed the key of the current array element */ public function key() { return $this->_key; } /** * Returns the current array element. * This method is required by the interface Iterator. * @return mixed the current array element */ public function current() { return $this->_d[$this->_key]; } /** * Moves the internal pointer to the next array element. * This method is required by the interface Iterator. */ public function next() { $this->_key=next($this->_keys); } /** * Returns whether there is an element at current position. * This method is required by the interface Iterator. * @return boolean */ public function valid() { return $this->_key!==false; } } $data = array('s1' => 11, 's2' => 22, 's3' => 33); $it = new CMapIterator($data); foreach ($it as $row) { echo $row, '<br />'; } /* 输出: 11 22 33 */ ?> ```
顶部
收展
底部
[TOC]
目录
PHP设计模式概述
设计模式之开闭原则
设计模式之里氏代换原则
设计模式之接口隔离原则
创建型模式(1)单例模式
创建型模式(2)工厂模式
创建型模式(3)抽象工厂模式
创建型模式(4)原型模式
创建型模式(5)建造者模式
结构型模式(6)委托代理模式
结构型模式(7)装饰模式
结构型模式(8)外观模式
结构型模式(9)组合模式
结构型模式(10)适配器模式
结构型模式(11)桥接模式
结构型模式(12)享元模式
行为型模式(13)策略模式
行为型模式(14)解释器模式
行为型模式(15)观察者模式
行为型模式(16)模板方法模式
行为型模式(17)迭代器模式
行为型模式(18)命令模式
行为型模式(19)备忘录模式
行为型模式(20)状态模式
行为型模式(21)访问者模式
行为型模式(22)中介者模式
行为型模式(23)责任链模式
相关推荐
PHP基础
PHP函数
PHP算法
PHP版本