PHP设计模式-迭代器模式

简介:PHP设计模式-迭代器模式

我们在使用框架中的模式进行数据库操作时经常会使用foreach去遍历结果集,但是我们都知道结果集是一个Collection对象。这样的操作是如何实现的呢?其实这就是迭代器模式的实现。

1定义:

在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。

2.实现

在实现迭代器模式之前,我们先来了解一下IteratorIterator是一个interface接口,该接口定义了5个方法

  • current:返回当前元素
  • key:返回当前元素的key的值
  • next:先前移动到下一个元素
  • rewind:返回迭代器的第一个元素
  • valid:判断迭代器是否有元素
<?php

class UserAll implements \Iterator
{
    //初始数组索引
    protected $index = 0;
    //结果集数组
    protected $data;

    public function __construct()
    {
        //此处为伪数据,有兴趣的可以结合之前的数据对象映射模式及适配器模式进行ORM封装
        $this->data = [
            ['id'=>1,'name'=>'测试1'],
            ['id'=>3,'name'=>'测试3']
        ];
    }

    //重置迭代器
    public function rewind()
    {
        $this->index = 0;
    }

    //验证迭代器是否有数据
    public function valid()
    {
        return $this->index < count($this->data);
    }

    //获取当前内容
    public function current()
    {
        return $this->data[$this->index];
    }

    //移动到下一个
    public function next()
    {
        $this->index++;
    }

    //获取迭代器位置key的值
    public function key()
    {
        return $this->index;
    }
}

$data = new UserAll();

foreach ($data as $item) {
    echo "id值:{$item['id']}  name:{$item['name']}".PHP_EOL;
}

上述代码运行结果如下:

id值:1  name:测试1

id值:3  name:测试3

 

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1