课程名称:大话PHP设计模式
课程章节: 12-1PHP迭代器模式
课程链接
主讲老师:Rango
课程内容
给出了迭代器模式的定义,然后通过代码演示让我们更加深入了解到迭代器模式的实现原理,主要是实现Iterator接口。
课程收获
定义
迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代。
迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代。
在对象的世界里,迭代器模式要维持类似数组的功能,看作是一个非侵入性对象刻面(facet),Client类往往分离自真实对象实现,指iterator接口。只要有可能,我们可以给迭代器传送一个引用,代替将来可能发生变化的具体或抽象类。
优势
相比于传统的编程模式,迭代器可以隐藏遍历元素的所需的操作
代码实现
class AllUser implements \Iterator
{
protected $ids;
protected $data = [];
protected $index;
function __construct()
{
$db = Factory::getDatabase();
$result = $db->query("select ud from user");
$this->id = $result->fetch_all(MYSQLI_ASSOC);
}
function current()
{
$id = $this->ids[$this->index]['id'];
return Factory::getUser($id);
}
function next(): void
{
$this->index ++;
}
function valid(): bool
{
return $this->index < count($this->ids);
}
function rewind(): void
{
$this->index = 0;
}
function key(): mixed
{
return $this->index;
}
}
$users = new AllUser;
foreach ($users as $user) {
$user->serial_no = rand(1000,9000);
}