迭代器(Iterator)模式,在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代。
创新互联是一家专注于网站设计、成都网站制作与策划设计,邻水网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:邻水等地区。邻水做网站价格咨询:13518219792
迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代。
在PHP官方手册中可以找到完整的SPL迭代器列表。得益于对PHP的强力支持,使用迭代器模式的大部分工作都包括在标准实现中,下面的代码示例就利用了标准Iterator的功能。
<?php //定义一个类,实现了Iterator的方法 class testIterator implements Iterator { 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++; } } //定义数组,生成类时使用 $arrString = array('jane','apple','orange','pear'); $testIterator = new testIterator($arrString); //开始迭代对象 foreach ( $testIterator as $key => $val ) { echo $key . '=>' . $val . '<br>'; }
运行可以看到如下结果:
0=>jane 1=>apple 2=>orange 3=>pear
如果有兴趣,可以在每一个函数里面开始处加上“var_dump(__METHOD__);”,这样就可以看到每个函数的调用顺序了,如下:
string(25) "testIterator::__construct" string(20) "testIterator::rewind" string(19) "testIterator::valid" string(21) "testIterator::current" string(17) "testIterator::key" 0=>jane string(18) "testIterator::next" string(19) "testIterator::valid" string(21) "testIterator::current" string(17) "testIterator::key" 1=>apple string(18) "testIterator::next" string(19) "testIterator::valid" string(21) "testIterator::current" string(17) "testIterator::key" 2=>orange string(18) "testIterator::next" string(19) "testIterator::valid" string(21) "testIterator::current" string(17) "testIterator::key" 3=>pear string(18) "testIterator::next" string(19) "testIterator::valid"
分享文章:PHP设计模式(6)迭代器模式
转载源于:https://www.cdcxhl.com/article16/jdcggg.html
成都网站建设公司_创新互联,为您提供企业网站制作、商城网站、移动网站建设、搜索引擎优化、品牌网站设计、品牌网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联