回答: 生成器和迭代器是一种特殊函数和对象,可以逐个生成值,无需存储整个数据集。生成器: 生成一系列值,每次调用产生一个值;迭代器: 提供访问集合元素的方法,遍历时产生一个元素;实战: 用于分页,逐页生成数据集,无需将整个数据集存储在内存中。
PHP高级特性:生成器与迭代器的妙用
生成器
生成器是一个用来生成一系列值的特殊函数。与常规函数不同,生成器可以在每次调用时生成一个值,而无需将整个值数组存储在内存中。
function numbersGenerator() { for ($i = 1; $i <= 10; $i++) { yield $i; } } foreach (numbersGenerator() as $number) { echo $number . "\n"; }
迭代器
迭代器是一种对象,提供了一种访问集合中元素的方法。与生成器类似,迭代器可以在遍历集合时生成一个元素,而无需将整个集合存储在内存中。
class NumberIterator implements Iterator { private $start; private $end; private $current; public function __construct($start, $end) { $this->start = $start; $this->end = $end; $this->current = $start; } public function rewind() { $this->current = $this->start; } public function current() { return $this->current; } public function key() { return $this->current; } public function next() { $this->current++; } public function valid() { return $this->current <= $this->end; } } $iterator = new NumberIterator(1, 10); foreach ($iterator as $number) { echo $number . "\n"; }
实战案例:分页器
生成器和迭代器非常适用于分页场景。通过使用生成器或迭代器,我们可以逐页生成数据集,而无需将整个数据集存储在内存中。
function paginate($query, $pageSize) { $page = 1; while (true) { $offset = ($page - 1) * $pageSize; $results = $query->offset($offset)->limit($pageSize)->execute(); if (count($results) === 0) { break; } yield $results; $page++; } } foreach (paginate($query, 10) as $page) { echo "Page $page\n"; foreach ($page as $result) { // Process the result } }
以上是PHP高级特性:生成器与迭代器的妙用的详细内容。更多信息请关注PHP中文网其他相关文章!