Heim > Artikel > Backend-Entwicklung > Was ist ein Generator in PHP? Wie benutzt man?
Beim Autofahren ist Geschwindigkeit nicht alles. Aber im Internet macht die Geschwindigkeit den entscheidenden Unterschied. Je schneller Ihre Anwendung ist, desto besser ist das Benutzererlebnis. In diesem Artikel geht es um Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?-Generatoren. Warum sprechen wir also über Geschwindigkeit? Sie werden schnell feststellen, dass Generatoren eine große Rolle bei der Geschwindigkeits- und Speicherverwaltung spielen.
Was ist Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man? Generator?
Erstellen Sie zunächst eine
generator.php-Datei, die in unserem Beispiel verwendet wird. Nachdem wir die Datei erstellt haben, fügen wir einen Code hinzu. <?php function getRange ($max = 10) {
$array = [];
for ($i = 1; $i < $max; $i++) {
$array[] = $i;
}
return $array;
}
foreach (getRange(15) as $range) {
echo "Dataset {$range} <br>";
}
Wir können schnell einen integrierten Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?-Server in dem Verzeichnis starten, in dem die Datei
erstellt wird: php -S localhost:8000
Wenn Sie http://localhost:8000/generator.php mit einem Browser öffnen, sollten wir das tun Sehen Sie sich so etwas an Ergebnis:
Dieser Code ist nicht sehr selbsterklärend
<?php foreach (getRange(Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX) as $range) { echo "Dataset {$range} <br>"; }
Der maximale Wert, den der obige Code generieren kann, ist
Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX(also Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man? Wenn wir den Browser aktualisieren, nachdem wir diese Änderung vorgenommen haben, stellen wir fest, dass dieses Mal etwas anders ist. Schade, dass Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man? nicht mehr über genügend Speicher verfügt Ich kann mir vorstellen, die Obergrenze von memory_limit in der Datei
php.inizu erhöhen. Aber um ehrlich zu sein, ist dieses Skript sowohl ineffizient als auch speicherintensiv. Was wir brauchen, ist ein effizientes und speicherarmes Skript.
Generatoren verwendenLassen Sie uns die gleiche Funktion wie oben definieren, sie mit dem gleichen Wert Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX aufrufen und sie erneut ausführen. Aber dieses Mal werden wir eine Generatorfunktion erstellen.
<?php function getRange ($max = 10) { for ($i = 1; $i < $max; $i++) { yield $i; } } foreach (getRange(Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX) as $range) { echo "Dataset {$range} <br>"; }Beim Parsen der
getRange
-Funktion durchlaufen wir dieses Mal nur die Werte und die yield
-Ausgabe. yield
ähnelt dem Rückgabewert darin, dass es auch einen Wert von einer Funktion zurückgibt, der einzige Unterschied besteht jedoch darin, dass yield
nur bei Bedarf einen Wert zurückgibt und dies nicht versucht Konvertieren Sie den gesamten Datensatz. Der Datensatz bleibt im Speicher. Wenn Sie zu Ihrem Browser gehen, sollten die auf der Seite angezeigten Daten angezeigt werden. Bei entsprechender Zeit zeigt der Browser schließlich die Daten an. Hinweis:
Generatoren können nur innerhalb von Funktionen verwendet werden.getRange
函数,这次,我们只循环遍历值和 yield
输出。 yield
与返回值类似,因为它也是从函数返回一个值,但唯一的区别是 yield
只会在需要时返回一个值,并且不会尝试将整个数据集保留在内存中。
如果您转到浏览器,您应该会看到页面上显示的数据。给定适当的时间,浏览器最终显示数据。
注意: 生成器只能在函数中使用。
有时候,我们可能会遇到想要解析一个庞大的数据集(也可能是日志文件),也可能对一个大型数据库的结果集执行计算,等等情况。我们不想让这些数据全部加载到内存中。我们应该尽可能的保存相应的内存状态。数据不一定要很大——无论数据有多小,生成器都是有效的。别忘了,我们的目的是使用更少的内存来尽可能快的处理数据。
有时候,我们的数据是基于 key-value 时才更有说服力。使用生成器时,我们可能会生成下面这样的键值对。
<?php function getRange ($max = 10) { for ($i = 1; $i < $max; $i++) { $value = $i * mt_rand(); yield $i => $value; } }
然后,我们可以使用这个键值对,就像使用任意的数组一样。
<?php foreach (getRange(Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX) as $range => $value) { echo "Dataset {$range} has {$value} value<br>"; }
生成器也能接收传参。这意味这生成器允许我们向其中注入参数,作为一个命令或者其他作用。例如,我们向生成器发送一个值,让它停止执行或者修改输出结果。使用上面的 getRange
Warum Generatoren verwenden
Manchmal kann es vorkommen, dass wir auf Situationen stoßen, in denen wir einen großen Datensatz (vielleicht eine Protokolldatei) analysieren oder Berechnungen mit dem Ergebnissatz einer großen Datenbank usw. durchführen möchten. Wir möchten nicht, dass alle diese Daten in den Speicher geladen werden. Wir sollten den entsprechenden Speicherstatus so weit wie möglich speichern. Die Daten müssen nicht groß sein – der Generator ist effizient, egal wie klein die Daten sind. Vergessen Sie nicht: Unser Ziel ist es, weniger Speicher zu verbrauchen, um Daten so schnell wie möglich zu verarbeiten.
Schlüssel-Wert-Paare zurückgebenManchmal sind unsere Daten überzeugender, wenn sie auf Schlüsselwerten basieren. Wenn wir einen Generator verwenden, können wir Schlüssel-Wert-Paare wie die folgenden generieren.
<?php function getRange ($max = 10) { for ($i = 1; $i < $max; $i++) { $injected = yield $i; if ($injected === 'stop') return; } }
<?php $generator = getRange(Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX); foreach ($generator as $range) { if ($range === 10000) { $generator->send('stop'); } echo "Dataset {$range} <br>"; }
Parameter an den Generator übergebenDer Generator kann auch Parameter empfangen. Das bedeutet, dass der Generator es uns ermöglicht, Parameter als Befehl oder andere Funktionen einzufügen. Beispielsweise senden wir einen Wert an den Generator, um dessen Ausführung zu stoppen oder seine Ausgabe zu ändern. Mit der Funktion getRange
oben können wir dies erreichen. rrreeeUm diesen Wert zu injizieren, können wir Folgendes tun. rrreee
Die Verwendung von Return im Generator führt zu einem Sprung aus dem Generator. Missbrauchen Sie keine Generatoren
Obwohl die Verwendung von
Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX🎜 etwas übertrieben ist, ist 🎜Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?_INT_MAX🎜 für mich 🎜2147483647🎜, was bedeutet: 🎜🎜🎜zwei Milliarden siebenundvierzig Millionen vierhundertachtundvierzig Millionen Dreitausendsechshundertsiebenundvierzig 🎜🎜🎜Generatoren sorgen für eine effizientere Speichernutzung. Bei Missbrauch kann es jedoch auch zu Gedächtnisproblemen kommen. 🎜Generatoren bieten erhebliche Leistungsverbesserungen, die kaum zu ignorieren sind. In den meisten Fällen benötigen wir keinen Server mit hoher Konfiguration, um den Code auszuführen. Wir müssen nur ein wenig umgestalten, Generatoren sind sehr nützlich, wir sollten sie häufiger verwenden Video-Tutorial
》Das obige ist der detaillierte Inhalt vonWas ist ein Generator in PHP? Wie benutzt man?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!