Heim > Backend-Entwicklung > PHP-Tutorial > Einführung und Beispiele zum PHP-Generator

Einführung und Beispiele zum PHP-Generator

伊谢尔伦
Freigeben: 2016-11-23 09:11:56
Original
1257 Leute haben es durchsucht

Hinweis: Generatoren werden nur von PHP5.5 und höher unterstützt.

Generatoren bieten eine einfachere Möglichkeit, eine einfache Objektiteration zu implementieren, ohne den Leistungsaufwand und die Komplexität der Implementierung einer Klasse mit der Iterator-Schnittstelle.

Mit Generatoren können Sie Code in einen foreach-Block schreiben, um einen Datensatz zu durchlaufen, ohne ein Array im Speicher zu erstellen, was Ihre Speichergrenze erreichen oder erhebliche Verarbeitungszeit in Anspruch nehmen würde. Stattdessen können Sie eine Generatorfunktion schreiben, genau wie eine normale benutzerdefinierte Funktion, und statt einer normalen Funktion, die nur einmal zurückgibt, kann der Generator so oft wie nötig nachgeben, um Werte zu generieren, über die iteriert werden muss.

Ein einfaches Beispiel ist die Verwendung eines Generators zur Neuimplementierung der Funktion range(). Die Standardfunktion range() muss für jeden Rückgabewert ein Array im Speicher generieren, was zu einem sehr großen Array führt. Der Aufruf von „range(0, 1000000)“ führt beispielsweise dazu, dass die Speichernutzung 100 MB überschreitet.

Als Alternative können wir einen xrange()-Generator implementieren, der nur genügend Speicher benötigt, um das Iterator-Objekt zu erstellen und den aktuellen Status des Generators intern zu verfolgen, und somit weniger als 1 KB Speicher benötigt.

Beispiel #1 Range() als Generator implementieren

<?php
    function xrange($start, $limit, $step = 1) {
        if ($start < $limit) {
            if ($step <= 0) {
                throw new LogicException(&#39;step必须是正数&#39;);
            }
            for ($i = $start; $i <= $limit; $i += $step) {
                yield $i;
            }
        } else {
            if ($step >= 0) {
                throw new LogicException(&#39;step必须是负数&#39;);
            }
            for ($i = $start; $i >= $limit; $i += $step) {
                yield $i;
            }
        }
    }
    /* 注意range() 和 xrange() 的结果在下面的统一输出中. */
    echo &#39;来自range()的单个奇数: &#39;;
    foreach (range(1, 9, 2) as $number) {
        echo "$number ";
    }
    echo "\n";
    echo &#39;来自xrange()的单个奇数 &#39;;
    foreach (xrange(1, 9, 2) as $number) {
        echo "$number ";
    }
?>
Nach dem Login kopieren

Die obige Routine gibt Folgendes aus:

Single digit odd numbers from range():  1 3 5 7 9 
Single digit odd numbers from xrange(): 1 3 5 7 9
Nach dem Login kopieren


Verwandte Etiketten:
Erklärung dieser Website
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage