http://www.yibyum.com

                                                                  【幸运快三app计划】详细介绍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 T(estIterator::next()   */  public function next() {    echo '第'.++$this->_step.'步:执行 '.__METHOD__.'<br>';    $this->_key++;  }  /**   * 返回当前索引游标指向的元素的值   *   * @see T[estIterator::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>';}?>
                                                                                  

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:宏碁推出 ConceptD专业显示器:27英寸4K@144,ΔE<1 - 宏碁显示器,宏碁
                                                                  下一篇:没有了