Heim > Backend-Entwicklung > PHP-Tutorial > Analyse der Syntaxdetails des PHP-Generators

Analyse der Syntaxdetails des PHP-Generators

伊谢尔伦
Freigeben: 2016-11-23 09:10:13
Original
1263 Leute haben es durchsucht

Eine Generatorfunktion sieht genauso aus wie eine gewöhnliche Funktion, außer dass der Generator bei Bedarf mehrere Werte erzeugt, anstatt einen einzelnen Wert zurückzugeben.

Wenn die Generatorfunktion aufgerufen wird, gibt sie einen zurück Wenn Sie über dieses Objekt iterieren (z. B. durch eine foreach-Schleife), ruft PHP die Generatorfunktion jedes Mal auf, wenn ein Wert erforderlich ist, und speichert dann den generierten Wert, wenn der Generator einen Wert erzeugt wird wiederhergestellt, wenn der nächste Wert benötigt wird.

Wenn keine weiteren Werte erzeugt werden, kann die Generatorfunktion einfach beendet werden und der aufrufende Code wird fortgesetzt, als ob ein Array alle seine Werte aufgebraucht hätte.

Hinweis:

Generatoren können keine Werte zurückgeben: Dies führt zu einem Kompilierungsfehler. Eine leere Return-Anweisung in einem Generator stellt eine gültige Syntax dar und führt zum Ausfall des Generators.

Yield-Schlüsselwort

Der Kern einer Generatorfunktion ist das Schlüsselwort yield. In seiner einfachsten Form ähnelt eine yield-Anweisung einer return-Anweisung, mit der Ausnahme, dass yield einen Wert zum Anzeigen des Generators bereitstellt Generator, anstatt einen Wert zurückzugeben und dann die Ausführung zu stoppen.

Beispiel Nr. 1 Einfaches Beispiel für die Erzeugung eines Werts

<?php
    function gen_one_to_three() {
        for ($i = 1; $i <= 3; $i++) {
            // Note that $i is preserved between yields.
            yield $i;
        }
    }
    $generator = gen_one_to_three();
    foreach ($generator as $value) {
         echo "$value\n";
    }
?>
Nach dem Login kopieren

Die obige Routine würde Folgendes ausgeben:

1
2
3
Nach dem Login kopieren

Hinweis:

Intern wird der serialisierte Ganzzahlschlüssel mit dem Ausgabewert gepaart, genau wie ein nicht-assoziatives Array

Achtung, wenn Sie Kontextausdrücke verwenden. Bei der Verwendung von yield (z. B. in einer Zuweisungsanweisung rechts vom Gleichheitszeichen) achten Sie darauf, Klammern zu verwenden. Beispielsweise ist der folgende Code korrekt:

$data = (yield $value);

Aber Der folgende Code verursacht einen Parsing-Fehler:

$data = yield $value;

Diese Syntax kann mit der send()-Methode im Generatorobjekt verwendet werden.

Holen Sie sich den Wert mit dem Schlüssel

PHP unterstützt assoziative Arrays sowie Generatoren. Zusätzlich zum Generieren einfacher Werte können Sie gleichzeitig auch Schlüssel generieren Die Syntax des /value-Paares ist sehr einfach und kann zum Definieren assoziativer Arrays verwendet werden, wie unten gezeigt.

Beispiel #2 Ein Schlüssel/Wert-Paar liefern

Die obige Routine wird Ausgabe:
<?php
    /* The input is semi-colon separated fields, with the first
     * field being an ID to use as a key. */
    $input = <<<&#39;EOF&#39;
1;PHP;Likes dollar signs
2;Python;Likes whitespace
3;Ruby;Likes blocks
EOF;
    function input_parser($input) {
        foreach (explode("\n", $input) as $line) {
            $fields = explode(&#39;;&#39;, $line);
            $id = array_shift($fields);
            yield $id => $fields;
        }
    }
    foreach (input_parser($input) as $id => $fields) {
        echo "$id:\n";
        echo " $fields[0]\n";
        echo " $fields[1]\n";
    }
?>
Nach dem Login kopieren

Vorsicht ist die gleiche wie bei der früheren Generierung einfacher Werte in einem Kontextausdruck, wobei die Yield-Anweisung in Klammern eingeschlossen werden muss:
1:
    PHP
    Likes dollar signs
2:
    Python
    Likes whitespace
3:
    Ruby
    Likes blocks
Nach dem Login kopieren

Nullwert generieren
$data = (yield $key => $value);
Nach dem Login kopieren

Yield kann ohne Parameter aufgerufen werden, um NULL-Werte mithilfe automatisch generierter Schlüssel zu generieren.

Beispiel Nr. 3: NULL-Werte generieren

Die obige Routine gibt aus:
<?php
    function gen_three_nulls() {
        foreach (range(1, 3) as $i) {
            yield;
        }
    }
    var_dump(iterator_to_array(gen_three_nulls()));
?>
Nach dem Login kopieren

Erzeugen von Werten durch Referenz
array(3) {
    [0]=>NULL
    [1]=>NULL
    [2]=>NULL
}
Nach dem Login kopieren

Generatorfunktionen können Werte durch Referenzen erzeugen. Dies ist dasselbe wie die Rückgabe von Referenzen aus Funktionen: durch Hinzufügen von & vor der Funktionsname.

Beispiel #4 Werte durch Referenz liefern

Die obige Routine gibt Folgendes aus:
<?php
    function &gen_reference() {
        $value = 3;
        while ($value > 0) {
            yield $value;
        }
    }
    /* 注意我们可以在循环中改变$number
     * because the generator is yielding references, $value
     * within gen_reference() changes. */
    foreach (gen_reference() as &$number) {
        echo (--$number).&#39;... &#39;;
    }
?>
Nach dem Login kopieren

2... 1... 0...
Nach dem Login kopieren

Verwandte Etiketten:
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage