Heim  >  Artikel  >  Backend-Entwicklung  >  Erweiterte PHP-Funktionen: die wunderbaren Einsatzmöglichkeiten von Generatoren und Iteratoren

Erweiterte PHP-Funktionen: die wunderbaren Einsatzmöglichkeiten von Generatoren und Iteratoren

WBOY
WBOYOriginal
2024-06-01 20:44:00976Durchsuche

Antwort: Generatoren und Iteratoren sind spezielle Funktionen und Objekte, die Werte einzeln generieren können, ohne den gesamten Datensatz zu speichern. Generator: Erzeugt eine Reihe von Werten, einen Wert für jeden Aufruf. Iterator: Bietet eine Methode für den Zugriff auf Sammlungselemente und generiert beim Durchlaufen ein Element. Wird zum Seitenwechsel verwendet, um Datensätze Seite für Seite zu generieren, ohne die gesamten Daten zu speichern im Gedächtnis verankert.

Erweiterte PHP-Funktionen: die wunderbaren Einsatzmöglichkeiten von Generatoren und Iteratoren

Erweiterte PHP-Funktionen: Die magische Verwendung von Generatoren und Iteratoren

Generator

Ein Generator ist eine spezielle Funktion, die zum Generieren einer Reihe von Werten verwendet wird. Im Gegensatz zu regulären Funktionen können Generatoren bei jedem Aufruf einen Wert erzeugen, ohne das gesamte Wertearray im Speicher zu speichern.

function numbersGenerator() {
  for ($i = 1; $i <= 10; $i++) {
    yield $i;
  }
}

foreach (numbersGenerator() as $number) {
  echo $number . "\n";
}

Iterator

Ein Iterator ist ein Objekt, das eine Möglichkeit bietet, auf Elemente in einer Sammlung zuzugreifen. Wie Generatoren können Iteratoren ein Element generieren, während sie eine Sammlung durchlaufen, ohne die gesamte Sammlung im Speicher zu speichern.

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";
}

Praktischer Fall: Paginator

Generatoren und Iteratoren eignen sich sehr gut für Paging-Szenarien. Durch die Verwendung von Generatoren oder Iteratoren können wir den Datensatz Seite für Seite generieren, ohne den gesamten Datensatz im Speicher zu speichern.

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
  }
}

Das obige ist der detaillierte Inhalt vonErweiterte PHP-Funktionen: die wunderbaren Einsatzmöglichkeiten von Generatoren und Iteratoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn