深入SPL:用IteratorAggregate构建可遍历对象图谱
超越foreach基础,学习如何通过实现IteratorAggregate接口让自定义类像数组一样遍历,并结合Generator玩转惰性迭代器。 · 难度:入门 · +10XP
深入SPL:用IteratorAggregate构建可遍历对象图谱
大多数PHP开发者会在简单循环中使用数组,但面对复杂业务对象时,你需要更优雅的遍历方式。SPL中的IteratorAggregate接口允许你定义对象的内部迭代器,配合getIterator方法返回一个Traversable对象。结合yield关键字,你可以创建惰性求值的迭代器,在遍历大数据集时节省内存。本教程将展示如何将多个实体聚合到一个可迭代的集合中,并利用递归迭代器实现树形结构的深度优先遍历。
class UserCollection implements \IteratorAggregate {
private array $users = [];
public function addUser(User $user): void {
$this->users[] = $user;
}
public function getIterator(): \Traversable {
foreach ($this->users as $user) {
yield $user;
}
}
}
$collection = new UserCollection();
$collection->addUser(new User('Alice'));
foreach ($collection as $user) {
echo $user->getName();
}