首页 / 教程资源

PHP设计模式-迭代器模式

发布时间:2023-04-03 12:08:27

我们在使用框架中的模式进行数据库操作时经常会使用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

上述就是迭代器模式实现的方法,如有缺省或不对的地方请在公众号【编程经验共享】留言

PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。

你的每个点赞和在看,我们都感恩在心

相关推荐