Was ist ein Generator in PHP? Wie benutzt man?

青灯夜游
Freigeben: 2023-04-10 17:14:02
nach vorne
3735 Leute haben es durchsucht

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?

Generatoren wurden in Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man? 5.5 hinzugefügt und bieten eine einfache Möglichkeit, Daten zu iterieren, ohne Arrays im Speicher zu erstellen. Sind Sie etwas verwirrt? Geben Sie dann ein Beispiel, um zu zeigen, dass die Verwendung von Generatoren eine gute Möglichkeit ist.

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>";
}
Nach dem Login kopieren
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

generator.php

erstellt wird:

php -S localhost:8000
Nach dem Login kopieren
Wenn Sie http://localhost:8000/generator.php mit einem Browser öffnen, sollten wir das tun Sehen Sie sich so etwas an Ergebnis:

Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?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>";
}
Nach dem Login kopieren

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.ini

zu erhöhen. Aber um ehrlich zu sein, ist dieses Skript sowohl ineffizient als auch speicherintensiv. Was wir brauchen, ist ein effizientes und speicherarmes Skript. Was ist ein Generator in Was ist ein Generator in PHP? Wie benutzt man?? Wie benutzt man?

Generatoren verwenden

Lassen 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>";
}
Nach dem Login kopieren
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;
    }
}
Nach dem Login kopieren

然后,我们可以使用这个键值对,就像使用任意的数组一样。

<?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>";
}
Nach dem Login kopieren

传递参数到生成器中

生成器也能接收传参。这意味这生成器允许我们向其中注入参数,作为一个命令或者其他作用。例如,我们向生成器发送一个值,让它停止执行或者修改输出结果。使用上面的 getRangeWarum 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 === &#39;stop&#39;) return;
    }
}
Nach dem Login kopieren

Dann können wir dieses Schlüssel-Wert-Paar wie jedes Array verwenden.

<?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>";
}
Nach dem Login kopieren

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

Hinweis:
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. 🎜

Zusammenfassung

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!

Verwandte Etiketten:
Quelle:learnku.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage