suchen
HeimBackend-EntwicklungPHP-TutorialWas ist Generator in PHP?

Was ist Generator in PHP?

Aug 16, 2017 am 09:48 AM
php

Generator in PHP ist eine neue Funktion, die seit PHP5.5 hinzugefügt wurde und ins Chinesische als „Generator“ übersetzt wird; Generator bietet eine bequeme Möglichkeit, einen einfachen Iterator zu implementieren, ohne dass eine Klasse erstellt werden muss Erben Sie die Iterator-Schnittstelle.

Was ist Generator in PHP?

Was ist Generator?

Ab PHP 5.5 war PHP hinzugefügt Eine neue Funktion ist Generator, die ins Chinesische als 生成器 übersetzt wird.

Generator bietet eine bequeme Möglichkeit, einen einfachen Iterator zu implementieren. Wenn Sie Generator zum Implementieren von Iterator verwenden, müssen Sie keine Klasse erstellen, um die Iterator-Schnittstelle zu erben.

Generatoren können einfach zur Implementierung der Objektiteration verwendet werden. Beginnen wir mit einem kleinen offiziellen Beispiel.

xrange

In PHP wissen wir alle, dass es eine Funktion namens range gibt, die zum Generieren eines Arrays arithmetischer Sequenzen verwendet wird, und dann können wir Verwenden Sie dies. Das Array wird über foreach iteriert. Genau das möchte ich tun.

foreach (range(1, 100, 2) as $num) {    echo "{$num}\n";
}

Dieser Code gibt das erste Element aus ist eine arithmetische Folge mit 1, dem letzten Term 100 und der Toleranz 2. Die Ausführungsreihenfolge ist wie folgt. Zuerst generiert range(1, 100, 2) ein Array, das eine arithmetische Folge wie oben speichert, und iteriert dann dieses Array in foreach.

Es stellt sich also die Frage: Was ist, wenn ich 1 Million Zahlen generieren möchte? Dann werden wir Hunderte Megabyte Speicher belegen. Obwohl Speicher jetzt sehr günstig ist, können wir Speicher nicht auf diese Weise verschwenden. Dann kann Ihnen unser Generator zu diesem Zeitpunkt nützlich sein. Betrachten Sie den folgenden Code.

function xrange($start, $limit, $step = 1) {    yield $start;
    $start++;
}foreach (xrange(1, 100, 2) as $num) {    echo "{$num}\n";
}

Das Ergebnis dieses Codes, genau das Dasselbe wie der vorherige Codeabschnitt, aber seine internen Prinzipien werden auf den Kopf gestellt.

Wie wir gerade gesagt haben, generiert range im vorherigen Code ein Array und foreach iteriert dann das Array, um einen bestimmten Wert herauszunehmen. Aber in diesem Code haben wir eine xrange-Funktion neu definiert und in der Funktion ein Schlüsselwort yield verwendet. Wir alle wissen: Wenn Sie eine Funktion definieren und hoffen, dass sie einen Wert zurückgibt, verwenden Sie return, um ihn zurückzugeben. Dieses yield kann also auch einen Wert zurückgeben, ist aber völlig anders als return.

Durch die Verwendung des Schlüsselworts yield kann die Funktion während der Ausführung unterbrochen werden. Gleichzeitig wird der Kontext der gesamten Funktion gespeichert und ein Objekt vom Typ Generator zurückgegeben. Wenn die next-Methode des Objekts ausgeführt wird, wird der Kontext zum Zeitpunkt der Unterbrechung neu geladen und läuft weiter, bis das nächste yield erscheint. Wenn später kein yield erscheint, gilt der gesamte Generator als beendet.

Auf diese Weise kann unser obiger Funktionsaufruf äquivalent wie folgt geschrieben werden.

$nums = xrange(1, 100, 2);while ($nums->valid()) {    echo $nums->current() . "\n";
    $nums->next();
}

Hier ist $num ein Generator Objekt. Wir sehen hier drei Methoden: valid, current und next. Wenn die Ausführung unserer Funktion abgeschlossen ist und es später keine yield-Unterbrechung gibt, ist die Ausführung unserer Funktion in xrange abgeschlossen, und die valid-Methode wird zu false. Was current betrifft, so wird der Wert nach dem aktuellen yield zurückgegeben. Dies bedeutet, dass die Generatorfunktion unterbrochen wird. Nach dem Aufruf der next-Methode wird die Funktion dann weiter ausgeführt, bis das nächste yield erscheint oder die Funktion endet.

Okay, hier sehen wir, dass yield verwendet wird, um einen Wert zu „generieren“ und ihn zurückzugeben. Eigentlich kann yield auch so geschrieben werden. Wie beim Rückgabewert wird hier beim weiteren Ausführen der Funktion ein Wert an die Funktion übergeben, der über $ret = yield; verwendet werden kann. Zum Beispiel. Generator::send($value)

function sum(){
    $ret = yield;    echo "{$ret}\n";
}

$sum = sum();
$sum->send('I am from outside.');
Auf diese Weise wird das Programm gedruckt out

Die von der Methode übergebene Zeichenfolge. Es kann auf beiden Seiten von send gleichzeitig Anrufe geben. yield

function xrange($start, $limit, $step = 1) {
    $ret = yield $start;
    $start++;    echo "{$ret}\n";
}

而像这样的使用,send() 可以返回下一个 yield 的返回。

其它的 Generator 方法

Generator::key()

对于 yield,我们可以这样使用 yield $id => $value,这是,我们可以通过 key 方法来获取 $id,而 current 方法返回的是 $value

Generator::rewind()

这个方法,可以帮我们让生成器重新开始执行并保存上下文,同时呢,会返回第一个 yield 返回的内容。在第一次执行 send 方法的时候,rewind 会被隐式调用。

Generator::throw()

这个方法,向生成器中,抛送一个异常。

后记

yield 作为 PHP 5.5 的新特性,让我们用了新的方法来高效地迭代数据。同时,我们还可以使用 yield 来实现协程。

更多相关知识,请访问 PHP中文网!!

Das obige ist der detaillierte Inhalt vonWas ist Generator in PHP?. 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
Welche Daten können in einer PHP -Sitzung gespeichert werden?Welche Daten können in einer PHP -Sitzung gespeichert werden?May 02, 2025 am 12:17 AM

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

Wie starten Sie eine PHP -Sitzung?Wie starten Sie eine PHP -Sitzung?May 02, 2025 am 12:16 AM

TostartaphpSession, useSession_start () atthescript'Sbeginning.1) PlaCEITBEFOREANYOUTPUTTOTHESESSIONSCOOKIE.2) useSsionsforuserDatalikeloginStatusOrShopingCarts

Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?Was ist eine Sitzungsregeneration und wie verbessert es die Sicherheit?May 02, 2025 am 12:15 AM

Die Sitzung der Sitzung bezieht sich auf die Generierung einer neuen Sitzungs -ID und die Ungültigmachung der alten ID, wenn der Benutzer sensible Vorgänge bei festgelegten Sitzungsangriffen ausführt. Die Implementierungsschritte umfassen: 1. Erkennen sensibler Vorgänge, 2. Erstellen neuer Sitzungs-ID, 3..

Was sind einige Leistungsüberlegungen bei der Verwendung von PHP -Sitzungen?Was sind einige Leistungsüberlegungen bei der Verwendung von PHP -Sitzungen?May 02, 2025 am 12:11 AM

PHP -Sitzungen haben erhebliche Auswirkungen auf die Anwendungsleistung. Zu den Optimierungsmethoden gehören: 1. Verwenden Sie eine Datenbank, um Sitzungsdaten zu speichern, um die Antwortgeschwindigkeit zu verbessern; 2. Reduzieren Sie die Verwendung von Sitzungsdaten und speichern Sie nur die erforderlichen Informationen. 3.. Verwenden Sie einen nicht blockierenden Sitzungsprozessor, um die Parallelitätsfunktionen zu verbessern. 4. Passen Sie die Ablaufzeit der Sitzung an, um Benutzererfahrung und Serverbelastung auszugleichen. 5. Verwenden Sie persistente Sitzungen, um die Anzahl der Les- und Schreibzeiten zu verringern.

Wie unterscheiden sich PHP -Sitzungen von Cookies?Wie unterscheiden sich PHP -Sitzungen von Cookies?May 02, 2025 am 12:03 AM

PhpSessionsaresServer-Side, whilecookiesareclient-Side.1) SESSIsions Storedataontheserver, Aremoresecure und Handlelargerdata.2) CookieStoredataoneTheClient, AslosenSecure und LimitedInsiesindaSsibilitäts- und -Stasibilitäts- und -Stasibilitäts- und -Anssibilitäts- und -Anssibilitätsporsedataandcookiesefornonsesibel, adailliertes, adailliertes, adailliertes, adailliertes, adailliertes, addiertes-addiertes- und -Staillieren- und -Anssistieren, und -Anssibilitätsporsedaten- und -Sta- und addierta und -Anssibilitäts- und addiertes- und addailliert.

Wie identifiziert PHP die Sitzung eines Benutzers?Wie identifiziert PHP die Sitzung eines Benutzers?May 01, 2025 am 12:23 AM

PhpidentifiesAsersSSessionUsingSSessionCookiesAndSessionIDs.1) WHANE Session_Start () iscalled, phpGeneratesAuniqueSessionIDStoredInacookienMamePhpSsidontonTheusers.2) thisidallowStoretrieVessionDataFromtheServer.

Was sind einige Best Practices für die Sicherung von PHP -Sitzungen?Was sind einige Best Practices für die Sicherung von PHP -Sitzungen?May 01, 2025 am 12:22 AM

Die Sicherheit von PHP -Sitzungen kann durch folgende Maßnahmen erreicht werden: 1. Verwenden Sie Session_regenerate_id (), um die Sitzungs -ID zu regenerieren, wenn sich der Benutzer anmeldet oder eine wichtige Operation ist. 2. Verschlüsseln Sie die Übertragungssitz -ID durch das HTTPS -Protokoll. A. Verwenden Sie Session_save_path (), um das sichere Verzeichnis anzugeben, um Sitzungsdaten zu speichern und Berechtigungen korrekt festzulegen.

Wo werden standardmäßig PHP -Sitzungsdateien gespeichert?Wo werden standardmäßig PHP -Sitzungsdateien gespeichert?May 01, 2025 am 12:15 AM

PhpSessionFilesArestoredinTHedRectorySpecifiedBySession.save_path, typischerweise/tmponunix-likesystemsorc: \ windows \ temponwindows

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft