简介:PHP设计模式-迭代器模式
我们在使用框架中的模式进行数据库操作时经常会使用foreach去遍历结果集,但是我们都知道结果集是一个Collection对象。这样的操作是如何实现的呢?其实这就是迭代器模式的实现。
1定义:
在不需要了解内部实现的前提下,遍历一个聚合对象的内部元素。相比传统的编程模式,迭代器模式可以隐藏遍历元素的所需操作。
2.实现
在实现迭代器模式之前,我们先来了解一下Iterator。Iterator是一个interface接口,该接口定义了5个方法
<?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
有遗漏或者不对的可以在我的公众号留言哦