PHP设计模式—迭代器模式
发布时间:2021-05-21 07:04:53 所属栏目:大数据 来源: https://www.jb51.cc
导读:? 定义: 迭代器模式(Iterator): 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 ? 结构: Iterator: 迭代器接口,用于定义得到开始对象、得到下一个对象、判断是否到有效、当前对象等抽象方法,统一接口,目前PHP已经集成
? 定义:迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 ?结构:
?代码实例:/** * IteratorAggregate 源码 * Interface to create an external Iterator. * @link https://PHP.net/manual/en/class.iteratoraggregate.PHP */ interface IteratorAggregate extends Traversable { * * Retrieve an external iterator * @link https://PHP.net/manual/en/iteratoraggregate.getiterator.PHP * @return Traversable An instance of an object implementing <b>Iterator</b> or * <b>Traversable</b> * @since 5.0.0 */ public function getIterator(); } * * Iterator源码 * Interface for external iterators or objects that can be iterated * themselves internally. * @link https://PHP.net/manual/en/class.iterator.PHP interface Iterator * * Return the current element * @link https://PHP.net/manual/en/iterator.current.PHP * @return mixed Can return any type. * @since 5.0.0 function current(); * * Move forward to next element * @link https://PHP.net/manual/en/iterator.next.PHP * @return void Any returned value is ignored. * @since 5.0.0 next* * Return the key of the current element * @link https://PHP.net/manual/en/iterator.key.PHP * @return mixed scalar on success,or null on failure. * @since 5.0.0 key* * Checks if current position is valid * @link https://PHP.net/manual/en/iterator.valid.PHP * @return boolean The return value will be casted to boolean and then evaluated. * Returns true on success or false on failure. * @since 5.0.0 valid(); * * Rewind the Iterator to the first element * @link https://PHP.net/manual/en/iterator.rewind.PHP * @return void Any returned value is ignored. * @since 5.0.0 rewind(); } * * 具体聚集类 * Class ConcreteAggregate class ConcreteAggregate implements IteratorAggregate { private $data = []; * * 往迭代器里面添加数据 function add($name) { $this->data[] = ; } * * 获取迭代器 * @return ConcreteIterator|Traversable getIterator() { // TODO: Implement getIterator() method. return new ConcreteIterator($this->data); } } * * 具体迭代器类 * Class ConcreteIterator class ConcreteIterator Iterator { $key = 0; function __construct($data$this->data = ; key = 0* * 返回当前元素 () { TODO: Implement current() method. return $this->data[]; } * * 前进到下一个元素 TODO: Implement next() method. key++* * 返回当前元素的键 TODO: Implement key() method. * * 检查当前位置是否有效 valid() { TODO: Implement valid() method. isset(]); } * * 将Iterator倒退到第一个元素 TODO: Implement rewind() method. ; } } 客户端调用 $concreteAggregate = new ConcreteAggregate(); $concreteAggregate->add('张三'); $concreteAggregate->add('李四'$concreteAggregate->add('王五'); $concreteIterator = $concreteAggregate->getIterator(); foreach ($concreteIterator as $concrete) { echo $concrete . "<br>"; } 结果 张三 李四 王五 ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |