迭代器

什么是迭代器模式

定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部显示

使用场景:

1.访问一个聚合对象内容而无须暴露它的内部显示

2.需要为聚合对象提供多种遍历方式

3.为遍历不同的聚合结构提供一个统一的接口

迭代器:类继承PHP的Iterator接口,批量操作。

1. 迭代器模式,在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。

2. 相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。

接口Iterator

current() 返回当前元素

key() 返回当前元素的键

next() 向前移动到下一个元素

rewind() 返回到迭代器的第一个元素

 1 <?php
 2 /**
 3  * Created by PhpStorm.
 4  * User: guoju
 5  * Date: 2018/12/6
 6  * Time: 22:50
 7  */
 8 class Test implements Iterator{
 9     private $list;
10     private $i=0;
11     private $valid=false;
12     public function __construct($array=array()){
13         $this->list=$array;
14     }
15     /**
16      * 将索引指定到首个元素
17      * {@inheritDoc}
18      * @see Iterator::rewind()
19      */
20     function rewind(){
21         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
22         $this->valid=(false !==reset($this->list));
23     }
24     /**
25      * 返回当前元素
26      * {@inheritDoc}
27      * @see Iterator::current()
28      */
29     function current(){
30         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
31         return current($this->list);
32     }
33     /**
34      * 索引指向下一个元素
35      * {@inheritDoc}
36      * @see Iterator::next()
37      */
38     function next(){
39         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
40         $this->valid=(false !== next($this->list));
41     }
42     /**
43      * 返回当前元素键值
44      * {@inheritDoc}
45      * @see Iterator::key()
46      */
47     function key(){
48         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
49         return key($this->list);
50     }
51     /**
52      * 判断下个是否有下个元素
53      * {@inheritDoc}
54      * @see Iterator::valid()
55      */
56     function valid(){
57         echo '第'.++$this->i.'步:执行 '.__METHOD__.'<br>';
58         return $this->valid;
59     }
60 }
61 
62 $list=array('name'=>'guoguo','pwd'=>'111111');
63 $test=new Test($list);
64 //foreach循环方式
65 foreach ($test as $key=>$val){
66     echo '输出索引为'.$key.'的元素值为:'.$val.'<br/><br/>';
67 }
68 
69 echo '----------------结束分隔线-----------------------<br/>';
70 $second=new Test($list);
71 //while循环方式
72 $second->rewind();
73 while($second->valid()){
74     echo '输出索引为'.$second->key().'的元素值为:'.$second->current().'<br/><br/>';
75     $second->next();
76 }
原文地址:https://www.cnblogs.com/BrokenHeart/p/10681306.html