PHP 设计模式(十二):迭代器模式

什么迭代器模式

迭代器模式(Iterator),又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。 迭代器模式为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。
PHP标准库(SPL)中提供了迭代器接口 Iterator,要实现迭代器模式,实现该接口即可。

应用场景

当你需要访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。另外,当需要对聚集有多种方式遍历时,可以考虑去使用迭代器模式。

PHP 代码实现
<?php

/**
 * 迭代器模式
 * Class MyIterator
 */
class MyIterator implements Iterator
{
    private $var = array();

    public function __construct($array)
    {
        if (is_array($array)) {
            $this->var = $array;
        }
    }

    public function rewind() {
        echo "倒回第一个元素";
        echo "<br>";
        reset($this->var);
    }

    public function current() {
        $var = current($this->var);
        echo "当前元素: $var";
        echo "<br>";
        return $var;
    }

    public function key() {
        $var = key($this->var);
        echo "当前元素的键: $var";
        echo "<br>";
        return $var;
    }

    public function next() {
        $var = next($this->var);
        echo "移向下一个元素: $var";
        echo "<br>";
        return $var;
    }


    public function valid() {
        $var = $this->current() !== false;
        echo "检查有效性: {$var}";
        echo "<br>";
        return $var;
    }
}

//=======================迭代器模式测试===============================

$values = array(1,2,3);
$it = new MyIterator($values);
foreach ($it as $k => $v) {
    print "此时键值对 -- key $k: value $v";
    echo "<hr>";
}

//结果
//倒回第一个元素
//当前元素: 1
//检查有效性: 1
//当前元素: 1
//当前元素的键: 0
//此时键值对 -- key 0: value 1

//移向下一个元素: 2
//当前元素: 2
//检查有效性: 1
//当前元素: 2
//当前元素的键: 1
//此时键值对 -- key 1: value 2

//移向下一个元素: 3
//当前元素: 3
//检查有效性: 1
//当前元素: 3
//当前元素的键: 2
//此时键值对 -- key 2: value 3

//移向下一个元素:
//当前元素:
//检查有效性:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值