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?
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!

PHPSSIONS CANSTORESTRINGEN, ZUGNALTEN, ARRAYS, ANDOBjekte.1.

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

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

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.

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.

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

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.

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


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

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
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
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
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft
