设计模式之迭代器模式--foreach循环的原理

设计模式之迭代器模式–foreach循环的原理

迭代器模式是迭代,循环,一般在语言层面都实现了。

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

为什么要使用迭代器模式

因为要循环啊,总有循环遍历的需求,所以就要使用迭代器模式了。

不过这些语言都内置了,比如foreach这种。那么foreach是怎么实现可以遍历的呢?

php实现迭代器模式

迭代器主要就是一个一个循环,那么需要有下一个的方法,也就是next,有下一个就需要判断是否可以循环,那么要有一个hasNext方法。

首先定义一个接口

/**
 * 迭代器模式
 * 迭代器接口
 */
interface Iterator{
    function next();

    function hasNext();
}

然后实现一个迭代器,继承这个接口


/**
 * 迭代器模式
 * 迭代器接口
 */
class Iterate implements Iterator{

    private $arr = [];
    private $current = 0;

    function __construct(Array $arr) {
        $this->arr = $arr;
    }

    /**
     * 获取下一个元素
     */
    function next() {
        $value = null;
        if ($this->hasNext()) {
            $value = $this->arr[$this->current];
            $this->current++;
        }
        return $value;
    }

    /**
     * 判断是否有下一个元素
     */
    function hasNext() {
        return $this->current < count($this->arr) ? true : false;
    }
}

客户端使用

$arr= [1,2,3];
$iterator = new iterator($arr);
while($iterator->hasNext()) {
    dump($iterator->next());
}

dump('foreach实现');

foreach($arr as $value) {
    dump($value);
}

在这里插入图片描述
可以看到和foreach的效果一模一样了。这就是迭代器模式,不过php已经有iterator这个接口了。

代码放在了我的github上面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值