分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

PHP设计模式 - 迭代器模式

发布时间:2023-09-06 02:01责任编辑:傅花花关键词:PHP

迭代器模式 (Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。

当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。

php标准库(SPL)中提供了迭代器接口 Iterator,要实现迭代器模式,实现该接口即可。

<?phpclass 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 11 22 33 44 5 *///Yii FrameWork Democlass 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 />‘;}/* 输出:112233 */?>

PHP设计模式 - 迭代器模式

原文地址:https://www.cnblogs.com/taozi32/p/9226824.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved