说到这种模式,就不得不提到循环语句。在《大话设计模式》中,作者表示这个模型的学习意义大于实际意义。为什么是这样?当然是foreach做的。任何语言都有这样一种相似的语法,可以轻松快速地遍历数组和对象,以至于迭代器模式逐渐成为23大设计模式中的明星过客。尤其是我们的PHP语言,PHP的强项在于对数组的灵活操作,它本身就是一个hashmap结构,自然会有各种方便的数组操作语法,而foreach也是我们最常用的语句,甚至比for还常用用过的。Gof类图及解释GoF定义:提供一种方法,在不暴露对象内部表示的情况下,顺序访问聚合对象中的每个元素CreateIterator(){$list=["a","b","c","d",];返回新的具体迭代器($列表);}}首先,它是一个聚合类,可以迭代Class,这里因为我是面向对象的设计模式,迭代器模式是针对迭代一个类的内容。这里,其实我们只是模拟了一个数组,交给了迭代器。接口MyIterator{公共函数First();公共功能下一个();公共功能IsDone();publicfunctionCurrentItem();}classConcreteIteratorimplementsMyIterator{private$list;私人索引;公共函数__construct($list){$this->list=$list;$this->index=0;}publicfunctionFirst(){$this->index=0;}publicfunctionNext(){$this->index++;}publicfunctionIsDone(){return$this->index>=count($this->list);}publicfunctionCurrentItem(){return$this->list[$this->index];}}迭代器出场,主要实现了对集合数据进行操作的四个方法。有点像你在学习数据结构或数据库时对游标所做的事情。使用First()和Next()移动光标,使用CurrentItem()获取当前光标的数据内容,使用IsDone()确认是否有下一条数据。因此,这种模式也称为游标模式。$agreegate=newConcreteAggregate();$iterator=$agreegate->CreateIterator();while(!$iterator->IsDone()){echo$iterator->CurrentItem(),PHP_EOL;$迭代器->下一步();}客户端可以直接使用while来操作。大家一定很好奇,为什么我们的迭代器接口类不命名为Iterator呢?试一试你就知道PHP已经为我们准备好了这个接口。实现之后就可以使用foreach来使用这个实现了Iterator接口的类。是不是很棒?最后我们来看看这个类的使用。类遍历不好吗?为什么要来回传递数组?开发过Java的同学一定知道,在一个名为Object类的JavaBean中,会写入一个List