Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 详细介绍php迭代器的作用

详细介绍php迭代器的作用

发布时间:2020-11-11   编辑:www.jquerycn.cn
jquery中文网为您提供详细介绍php迭代器的作用等资源,欢迎您收藏本站,我们将为您提供最新的详细介绍php迭代器的作用资源

我们来想一下,如果把集合对象和对集合对象的操作放在一起,当我们想换一种方式遍历集合对象中元素时,就需要修改集合对象了,违背“单一职责原则”,而迭代器模式将数据结构和数据结构的算法分离开,两者可独立发展。

php迭代器(Iterator)的作用:

允许对象以自己的方式迭代内部的数据,从而使它可以被循环访问,Iterator接口摘要如下:

Iterator extends Traversable {   //返回当前索引游标指向的元素   abstract public mixed current ( void )   //返回当前索引游标指向的键   abstract public scalar key ( void )   //移动当前索引游标到下一元素   abstract public void next ( void )   //重置索引游标   abstract public void rewind ( void )   //判断当前索引游标指向的元素是否有效   abstract public boolean valid ( void ) }

迭代器优缺点分析:

优点

1.支持多种遍历方式。比如有序列表,我们根据需要提供正序遍历、倒序遍历两种迭代器。用户只需要得到我们的迭代器,就可以对集合执行遍历操作

2.简化了聚合类。由于引入了迭代器,原有的集合对象不需要自行遍历集合元素了

3.增加新的聚合类和迭代器类很方便,两个维度上可各自独立变化

4.为不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上操作

缺点:

迭代器模式将存储数据和遍历数据的职责分离增加新的集合对象时需要增加对应的迭代器类,类的个数成对增加,在一定程度上增加系统复杂度。

下面是一个简单的例子演示Iterator的使用方法:

<?php /**  * 该类允许外部迭代自己内部私有属性$_test,并演示迭代过程  *  * @author 疯狂老司机  */ class TestIterator implements Iterator {   /*    * 定义要进行迭代的数组    */   private $_test = array('dog', 'cat', 'pig');   /*    * 索引游标    */   private $_key = 0;   /*    * 执行步骤    */   private $_step = 0;   /**    * 将索引游标指向初始位置    *    * @see TestIterator::rewind()    */   public function rewind() {     echo '第'.  $this->_step.'步:执行 '.__METHOD__.'<br>';     $this->_key = 0;   }   /**    * 判断当前索引游标指向的元素是否设置    *    * @see TestIterator::valid()    * @return bool    */   public function valid() {     echo '第'.  $this->_step.'步:执行 '.__METHOD__.'<br>';     return isset($this->_test[$this->_key]);   }   /**    * 将当前索引指向下一位置    *    * @see TestIterator::next()    */   public function next() {     echo '第'.  $this->_step.'步:执行 '.__METHOD__.'<br>';     $this->_key  ;   }   /**    * 返回当前索引游标指向的元素的值    *    * @see TestIterator::current()    * @return value    */   public function current() {     echo '第'.  $this->_step.'步:执行 '.__METHOD__.'<br>';     return $this->_test[$this->_key];   }   /**    * 返回当前索引值    *    * @return key    * @see TestIterator::key()    */   public function key() {     echo '第'.  $this->_step.'步:执行 '.__METHOD__.'<br>';     return $this->_key;   } } $iterator = new TestIterator(); foreach($iterator as $key => $value){   echo "输出索引为{$key}的元素".":$value".'<br><br>'; } ?>

以上例子将输出:

第1步:执行 TestIterator::rewind 第2步:执行 TestIterator::valid 第3步:执行 TestIterator::current 第4步:执行 TestIterator::key 输出索引为0的元素:dog 第5步:执行 TestIterator::next 第6步:执行 TestIterator::valid 第7步:执行 TestIterator::current 第8步:执行 TestIterator::key 输出索引为1的元素:cat 第9步:执行 TestIterator::next 第10步:执行 TestIterator::valid 第11步:执行 TestIterator::current 第12步:执行 TestIterator::key 输出索引为2的元素:pig 第13步:执行 TestIterator::next 第14步:执行 TestIterator::valid

从以上例子可以看出,如果执行valid返回false,则循环就此结束。

相了解更多相关问题请访问jquery中文网:PHP视频教程

以上就是详细介绍php迭代器的作用的详细内容,更多请关注jQuery中文网其它相关文章!

  • 本文原创发布jQuery中文网,转载请注明出处,感谢您的尊重!
  • 您可能感兴趣的文章:
    详细介绍php迭代器的作用
    php表单生成器有好处吗
    一篇文章教你如何使用Python生成器
    浅析jquery的作用与优势
    php中Iterator迭代对象属性的用法介绍
    超详细的Python中与迭代相关的函数
    PHP生成器yield处理大量数据业务(代码示例)
    python基础教程适合初学者吗
    Lua 迭代器
    干货推荐:Python迭代器和生成器最易懂、最全面的文章

    [关闭]