Maison > développement back-end > tutoriel php > Fonctionnalités avancées PHP : les merveilleuses utilisations des générateurs et des itérateurs

Fonctionnalités avancées PHP : les merveilleuses utilisations des générateurs et des itérateurs

WBOY
Libérer: 2024-06-01 20:44:00
original
1005 Les gens l'ont consulté

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 : les merveilleuses utilisations des générateurs et des itérateurs

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";
}
Copier après la connexion

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";
}
Copier après la connexion

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
  }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal