一、什么是迭代器模式
在不需要了解内部实现的前提下,遍历一个聚合对象内部元素
二、 迭代器作用
相比传统的编程模式,迭代器可以隐藏遍历元素的所需操作
三、具体实现
class AllUser implements \Iterator // 继承框架自带迭代器基类
{
protected $index = 0;
protected $data = [];
protected $ids;
public function __construct()
{
$db = Factory::getDatabase();
$result = $db->query("select id from user");
$this->ids = $result->fetch_all(MYSQLI_ASSOC);
}
// 重置迭代器
public function rewind()
{
$this->index = 0;
}
// 验证迭代器是否有数据
public function valid()
{
return $this->index < count($this->ids);
}
// 获取当前内容
public function current()
{
$id = $this->ids[$this->index]['id'];
return Factory::getUser($id);
}
// 移动key到下一个
public function next()
{
return $this->index++;
}
// 获取当前索引
public function key()
{
return $this->index;
}
}
//实现迭代遍历用户表
$users = new AllUser();
//可实时修改
foreach ($users as $user){
var_dump($user->name);
$user->rand = rand(1,999); // 修改User表,rand字段的值
}