Inhaltsverzeichnis
Wie funktioniert yield : Ein einfaches Beispiel
Real-World-Anwendungsfall: Verarbeitung großer Dateien
Hauptvorteile von Generatoren
Erweitert: Schlüsseln und Werte ergeben
Einschränkungen, die berücksichtigt werden müssen
Abschluss
Heim Backend-Entwicklung PHP-Tutorial Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort 'Ertrag'

Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort 'Ertrag'

Aug 03, 2025 am 01:38 AM
PHP Functions

Verwenden Sie den PHP -Generator und geben Sie Schlüsselwörter auf, um große Datensätze effektiv zu verarbeiten, um den Speicherüberlauf zu vermeiden. 1. Der Generator erkennt die faule Bewertung durch Ertragswert und hinterlässt jeweils nur einen Wert im Speicher. 2. Es ist für Szenarien geeignet, z. B. das Lesen großer Dateien Zeile für Zeile, z. 3. Es unterstützt die Ausgabe von Schlüsselwertpaaren und kann ausdrücklich Schlüsselnamen angeben. 4. Es hat die Vorteile eines geringen Speichers, präziser Code und nahtloser Integration in foreach; 5. Es gibt jedoch Beschränkungen wie die Unfähigkeit, zurückzuspulen, den Zufallszugriff nicht zu unterstützen und nicht wiederverwendet zu werden, und es muss vor der Durchführung der Iteration nachgebildet werden. Wenn es notwendig ist, eine große Datenmenge zu durchqueren, sollte die Verwendung von Generatoren Priorität erhalten.

Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort

Im Umgang mit großen Datensätzen in PHP kann die Speicherverwendung schnell zu einem Engpass werden - insbesondere wenn Sie Tausende oder sogar Millionen von Datensätzen in Arrays laden, bevor Sie sie verarbeiten. Hier kommen PHP -Generatoren und das Keyword yield ins Spiel und bieten eine leistungsstarke Möglichkeit, Daten über Daten zu iterieren , ohne alles gleichzeitig in den Speicher zu laden .

Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort

Ein Generator ist eine spezielle Funktion, mit der Sie über eine Datenmenge iterieren können, ohne den gesamten Datensatz im Speicher zu erstellen und zu speichern. Anstatt einen Wert return und die Ausführung zu beenden, ergibt ein Generator die Werte einzeln, wobei die Ausführung zwischen jeder yield und Wiederherstellung bei der Anforderung des nächsten Wertes pausiert.


Wie funktioniert yield : Ein einfaches Beispiel

Anstelle dieses erinnerungslastigen Ansatzes:

Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort
 Funktion getNumbers ($ n) {
    $ number = [];
    für ($ i = 1; $ i <= $ n; $ i) {
        $ number [] = $ i;
    }
    $ number zurückgeben;
}

foreach (GetNumbers (1000000) als $ num) {
    echo "$ num \ n";
}

Dies schafft ein Array mit 1 Million Ganzzahlen im Gedächtnis - entsprechend und unnötig.

Mit einem Generator können Sie:

Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort
 Funktion getNumbers ($ n) {
    für ($ i = 1; $ i <= $ n; $ i) {
        ergeben $ i;
    }
}

foreach (GetNumbers (1000000) als $ num) {
    echo "$ num \ n";
}

Jetzt gibt es jeweils nur ein Wert im Gedächtnis. Die Funktion pausiert nach jeder yield , wartet auf die nächste Iteration und setzt sich dann fort und reduziert die Speicherverwendung massiv .


Real-World-Anwendungsfall: Verarbeitung großer Dateien

Eine der praktischsten Anwendungen von Generatoren ist das Lesen großer Dateien (wie CSVs oder Protokolle) Zeile für Zeile.

 Funktionsanleitungen ($ Datei) {
    $ handle = fopen ($ file, &#39;r&#39;);
    if (! $ Handle) {
        Neue Ausnahme werfen ("Datei kann nicht öffnen: $ file");
    }

    while (($ line = fGets ($ Handle))! == false) {
        Rendite $ Line;
    }

    fcLose ($ Handle);
}

// Verwendung
foreach (Readlines (&#39;riesige log-file.txt&#39;) als $ line) {
    Echo "Verarbeitung:". trimmen ($ line). "\N";
}

Ohne einen Generator können Sie file() verwenden, um alle Zeilen in ein Array zu laden - aber das könnte mit einer großen Datei abstürzen. Mit yield verarbeiten Sie jeweils eine Zeile und halten die Speicherverwendung niedrig und vorhersehbar.


Hauptvorteile von Generatoren

  • Niedriger Speicherausdruck : Es wird jeweils nur ein Element verarbeitet.
  • Sauberer, lesbarer Code : Sieht wie eine reguläre Schleife aus, verhält sich aber träge.
  • Lazy Evaluation : Werte werden nur bei Bedarf generiert.
  • Seamless Integration in foreach : Generatoren geben ein Objekt zurück, das die Iterator -Schnittstelle implementiert.

Erweitert: Schlüsseln und Werte ergeben

Sie können auch explizit Tasten angeben:

 Funktion getKeyvaluepairs () {
    Ergeben Sie &#39;First&#39; => 1;
    Ergeben Sie &#39;zweite&#39; => 2;
    Ergeben Sie &#39;dritte&#39; => 3;
}

foreach (getKeyvaluepairs () als $ key => $ value) {
    echo "$ key: $ value \ n";
}

Oder geben Sie null , wenn Sie Daten im laufenden Fliegen filtern oder transformieren möchten.


Einschränkungen, die berücksichtigt werden müssen

  • Ich kann nach der Iteration nicht zurückspulen : Sobald ein Generator konsumiert ist, ist er fertig (es sei denn, Sie erstellen ihn neu).
  • Kein Zufallszugriff : Sie können nicht direkt zum 100. Artikel springen.
  • Nicht wiederverwendbar : Generatoren sind ein Einsatz, sofern nicht verpackt oder neu initialisiert.

Zum Beispiel:

 $ gen = GetNumbers (3);
foreach ($ gen As $ n) {echo "$ n"; } // 1 2 3
foreach ($ gen As $ n) {echo "$ n"; } // nichts - Generator ist bereits erschöpft

Abschluss

Generatoren mit yield sind ideal, um große Datensätze effizient zu behandeln - ob Sie Dateien lesen, Datenbanken abfragen oder Datenströme verarbeiten. Indem sie träge Werte produzieren, helfen sie, die Speicherverwendung niedrig und leistungsstark zu halten.

Verwenden Sie sie, wenn Sie versucht sind, ein großes Array zu bauen, um einmal darüber nachzuschlagen. In vielen Fällen benötigen Sie nicht den gesamten Datensatz im Speicher - nur jeweils ein Element.

Grundsätzlich: Wenn Sie nachgeben, sollten Sie nachgeben.

Das obige ist der detaillierte Inhalt vonSpeichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort 'Ertrag'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

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

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1517
276
Lösen komplexer Probleme mit rekursiven Funktionen in PHP Lösen komplexer Probleme mit rekursiven Funktionen in PHP Aug 02, 2025 pm 02:05 PM

Rekursive Funktionen sind eine effektive Möglichkeit, komplexe Probleme in PHP zu lösen, insbesondere für die Behandlung verschachtelter Daten, mathematische Berechnungen und Dateisystem-Durchfahrten mit selbstähnlichen Strukturen. 1. Für verschachtelte Arrays oder Menüstrukturen kann sich die Rekursion automatisch an jede Tiefe anpassen, durch das Basisbeispiel (leeres Kind) enden und Schicht für Schicht erweitern. 2. Bei der Berechnung von Faktorien und Fibonacci -Sequenzen implementiert Rekursion intuitiv mathematische Definition, aber naive Fibonacci hat Leistungsprobleme und kann durch den Speicher optimiert werden. 3. Beim Überqueren des Verzeichnisses kann die Rekursion in alle Ebenen der Ebene eindringen, was einfacher ist als die Iteration, aber dem Risiko eines Stapelüberlaufs sollte die Aufmerksamkeit geschenkt werden. 4. Bei Verwendung von Rekursion müssen sichergestellt werden, dass der Basisfall erreichbar ist, unendliche Anrufe vermeiden. Wenn die Tiefe groß ist, sollte er als Iteration oder explizite Stapelsubstitution verwendet werden, um die Leistung und Stabilität zu verbessern. Also, wenn das Problem "kleiner selbst kleiner ist

Verständnis der PHP-Pass-by-Referenz: Leistung und Fallstricke Verständnis der PHP-Pass-by-Referenz: Leistung und Fallstricke Aug 03, 2025 pm 03:10 PM

Pass-by-referenceinphpdoesnotimProveperformance withlargearraysorobjectsDuetocopy-on-writeAndobjecthandles, SoitsouldnotaNesedForthatpurple

Mastering von PHP -Schließungen und das Schlüsselwort 'Use' für den lexikalischen Scoping Mastering von PHP -Schließungen und das Schlüsselwort 'Use' für den lexikalischen Scoping Aug 01, 2025 am 07:41 AM

Phpclousures with theUseKeywordNableLexicalScopingByCapturingVariables ausTheparentscope.1.ClosuresareanonymousFunctionsThatcanaccessexternalvariableSviaUsive

Die Entwicklung von Rückrufen: erstklassige Callable-Syntax in PHP 8.1 Die Entwicklung von Rückrufen: erstklassige Callable-Syntax in PHP 8.1 Aug 03, 2025 am 10:00 AM

Php8.1didnotinTroducuceCuSt-ClassCallablesSyntax; ThisFeatureSCingInphp8.4.1.Priortophp8.4, CallbacksusedStrings, Arrays, Orclos URES, die mit der Beeinträchtigung der THEECOSIDECOSystems, Fasern und BettertyPingbutdidNotcheCalla

Techniken zur Simulation der Funktion Überladung in PHP Techniken zur Simulation der Funktion Überladung in PHP Aug 03, 2025 pm 01:12 PM

PHP unterstützt keine Funktion Überladung wie Java oder C, kann jedoch durch eine Vielzahl von Techniken simuliert werden. 1. Verwenden Sie Standardparameter und optionale Parameter, um verschiedene Aufrufmethoden zu erreichen, indem Standardwerte für Parameter festgelegt werden. 2. Verwenden Sie die Parameterliste der variablen Länge (z. B. ... Operatoren) und führen Sie eine unterschiedliche Logik gemäß der Anzahl der Parameter aus. 3. Führen Sie Typprüfungen innerhalb der Funktion durch und ändern Sie das Verhalten gemäß dem Parametertyp. 4. Verwenden Sie die benannten Parameter von PHP8, um optionale Parameter durch explizites Benennen zu überspringen und die Lesbarkeit zu verbessern. 5. Basierend auf der Parametermodusverteilung zu verschiedenen Verarbeitungsfunktionen, indem Sie die Anzahl und die Art der Parameter beurteilen, die für komplexe Szenarien geeignet sind. Diese Methoden haben Kompromisse und sollten gemäß den tatsächlichen Bedürfnissen ausgewählt werden, um einen klaren und wartenbaren Code zu gewährleisten.

Erstellen von Callable -Objekten in PHP mit der magischen Methode '__invoke' Erstellen von Callable -Objekten in PHP mit der magischen Methode '__invoke' Aug 06, 2025 am 09:29 AM

The__invokemagicmethodinphpallowsanObjectTobecalledasAfunktion, ermöglicht die TittoactlikeAcallable.2.ISISISEFINDEDWITHINACLASSANAUTOMATIONSTRIGHTEDHENDHEOBJECTISISHEFOWSFULDEFUTEFULEFULEFULABENSFULABELABENSFUCHEN, Strategien, Strategien, Strategien, Strategyalables, StrategyPatters, StrategyPatters, StrategyPatters, StrategyPatters, StrategyPatters, StrategyPatters, StrategyPatters, StrategyPatters, StrategyPatters,,

Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort 'Ertrag' Speichereffiziente Iteration mit PHP-Generatoren und dem Schlüsselwort 'Ertrag' Aug 03, 2025 am 01:38 AM

Verwenden Sie den PHP -Generator und geben Sie Schlüsselwörter auf, um große Datensätze effektiv zu verarbeiten, um den Speicherüberlauf zu vermeiden. 1. Der Generator erkennt die faule Bewertung durch Ertragswert und hinterlässt jeweils nur einen Wert im Speicher. 2. Es ist für Szenarien geeignet, z. B. das Lesen großer Dateien Zeile für Zeile, z. 3.. Unterstützen Sie die Ausgabe des Schlüsselwertpaars und geben Sie den Schlüsselnamen explizit an. 4. Es hat die Vorteile eines geringen Speichers, präziser Code und nahtloser Integration in foreach; 5. Es gibt jedoch Beschränkungen wie die Unfähigkeit, zurückzuspulen, den Zufallszugriff nicht zu unterstützen und nicht wiederverwendet zu werden, und es muss vor der Durchführung der Iteration nachgebildet werden. Wenn es notwendig ist, eine große Datenmenge zu durchqueren, sollte die Verwendung von Generatoren Priorität erhalten.

Nutzung statischer Variablen innerhalb der Funktionen für die Zustandsdauer Nutzung statischer Variablen innerhalb der Funktionen für die Zustandsdauer Aug 14, 2025 pm 10:46 PM

StaticvariablesinsideFunctionsRetaintheirvaluebetweencalls, InitializedonceAndPersistingFoteProgram’sduration THILEREMINGEFUNKTION-SCOPED.2.TheyareusefulFulForForTrackingFunctionCallcounts, CachingResults, Andimplementinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging -Gener-Aspekte, Asseenincandphpexamples.

See all articles