迭代器

什么是迭代器模式

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

 

使用场景:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值