Réponse : les générateurs et les itérateurs sont des fonctions et des objets spéciaux qui peuvent générer des valeurs une par une sans stocker l'intégralité de l'ensemble de données. Générateur : génère une série de valeurs, une valeur pour chaque appel ; Itérateur : fournit une méthode pour accéder aux éléments de la collection et génère un élément lors du parcours ; Combat pratique : utilisé pour la pagination, générant des ensembles de données page par page, sans stocker l'intégralité des données. mis en mémoire.
Fonctionnalités avancées PHP : L'utilisation magique des générateurs et des itérateurs
Générateur
Un générateur est une fonction spéciale utilisée pour générer une série de valeurs. Contrairement aux fonctions classiques, les générateurs peuvent produire une valeur à chaque appel sans stocker l'intégralité du tableau de valeurs en mémoire.
function numbersGenerator() { for ($i = 1; $i <= 10; $i++) { yield $i; } } foreach (numbersGenerator() as $number) { echo $number . "\n"; }
Itérateur
Un itérateur est un objet qui fournit un moyen d'accéder aux éléments d'une collection. Comme les générateurs, les itérateurs peuvent générer un élément tout en parcourant une collection sans stocker l’intégralité de la collection en mémoire.
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"; }
Cas pratique : Paginator
Les générateurs et itérateurs sont très adaptés aux scénarios de pagination. En utilisant des générateurs ou des itérateurs, nous pouvons générer l'ensemble de données page par page sans stocker l'intégralité de l'ensemble de données en mémoire.
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 } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!