Ausführliche Erläuterung von Namespaces und Merkmalen in PHP sowie neuen Funktionen von Generatoren

黄舟
Freigeben: 2023-03-14 10:38:01
Original
1387 Leute haben es durchsucht

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Namespace, den Merkmalen und den Generatoren der neuen Funktionen von PHP ein. Er betrifft hauptsächlich den Inhalt von Merkmalen (Traits) und Generatoren (Generatoren) in PHP Generator (Generator) Interessierte Studierende können sich darauf beziehen.

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Inhalte zu den neuen Funktionen von PHP wie Namespaces, Merkmalen und Generatoren vor. Er wird zu Ihrer Referenz und zum Lernen geteilt:

1. Namensraum

Was ist der Namensraum?

1). Namespace wurde in PHP 5.3 eingeführt, ähnlich der Funktion von Ordnern. Beispielsweise befinden sich Request und Response im Symfony-Framework unter dem Symfony-Namespace.

2). Der Namespace sollte immer in der Zeile unter dem

3) Der Namensraum der PHP-Datei unterscheidet sich vom physischen Dateisystem des Betriebssystems. Dies ist ein virtuelles Konzept und entspricht nicht unbedingt der Verzeichnisstruktur des Dateisystems. Dennoch platzieren die meisten PHP-Komponenten Subnamespaces in Unterverzeichnissen des Dateisystems, um mit dem weit verbreiteten PSR4-Autoloading-Standard kompatibel zu sein.

4) Namespace ist nur ein Symbol der PHP-Sprache. Der PHP-Interpreter fügt dieses Symbol als Präfix zu den Namen von Klassen, Schnittstellen, Funktionen und Konstanten hinzu.

Warum brauchen Sie einen Namensraum?

1) Namespace ermöglicht die Ausführung des Programms wie eine Sandbox und kann mit Code verwendet werden, der von anderen Entwicklern geschrieben wurde. Stellen Sie sicher, dass Ihr Code und Ihre Projekte mit den Drittanbieterabhängigkeiten des Projekts verwendet werden können.

Namespace deklarieren

1). Namespaces der obersten Ebene werden häufig zum Festlegen von Anbieternamen der obersten Ebene verwendet. 2) Der Namespace des Herstellers muss global eindeutig sein. Subnamespaces sind nicht so wichtig, aber sie helfen, den Code des Projekts zu organisieren.

Import und Alias

1). Ab PHP5.3 können Sie PHP-Klassen, Schnittstellen und andere Namespaces importieren und Aliase für sie erstellen. Ab PHP5.6 können Sie PHP-Funktionen und -Konstanten importieren und Aliase für sie erstellen.

2). Wenn Sie zum Importieren von Code das Schlüsselwort use verwenden, muss am Anfang kein Symbol hinzugefügt werden, da PHP davon ausgeht, dass der importierte Namespace ein vollständig qualifizierter Namespace ist. Das Schlüsselwort „use“ muss im globalen Bereich erscheinen, d. h. es darf nicht in einer Klasse oder Funktion vorkommen, da dieses Schlüsselwort während der Kompilierung verwendet wird. Das Schlüsselwort „use“ kann jedoch nach der Namespace-Deklarationsanweisung verwendet werden, um anderen Namespaces zu importieren.

Ab PHP5.6 können wir Funktionen und Konstanten importieren.


<?php
use func Namespace\functionName;

functionName();
Nach dem Login kopieren

kann auch Konstanten,


use constant Namespace\CONS_NAME;
echo CONS_NAME;
Nach dem Login kopieren

Aliase und Klassennamen von Funktionen und Konstanten importieren auf die gleiche Weise.

Best Practices

1).PHP ermöglicht die Definition mehrerer Namespaces in einer PHP-Datei. Dies kann jedoch verwirrend sein und widerspricht der bewährten Vorgehensweise, eine Datei pro Klasse zu verwenden. 2) Wenn Sie in einem Namespace auf den Code des globalen Namespace verweisen, müssen Sie ein Präfix hinzufügen, um PHP mitzuteilen, dass es die Klasse global finden muss, z. B. die native Ausnahmeklasse von PHP.

Automatisches Laden

1). Der Namespace bildet eine solide Grundlage für den von PHP-FIG entwickelten PSR4-Autoloader.

2. Verwenden Sie die Schnittstelle

1). Weil sie alle über Lenkräder, Gaspedale und Bremsen verfügen und der Treibstoff Benzin ist.

3. Eigenschaften

1). Mit einer oder mehreren Funktionen haben Merkmale in vorhandenen PHP-Klassen zwei Funktionen: Sie zeigen an, was die Klasse tun kann (ähnlich wie bei Schnittstellen) und bieten modulare Praktiken (ähnlich wie bei Klassen).

2). Merkmale ermöglichen es zwei unabhängigen Klassen, dieselben Attribute und Methoden zu verwenden.

3). Der PHP-Interpreter kopiert die Eigenschaften und fügt sie in den Definitionskörper der Klasse ein.

4. Erstellen Sie einen Generator

1) Verwenden Sie das Schlüsselwort yield einmal oder mehrmals in einer normalen Funktion, ohne einen Wert zurückzugeben Diese Funktion erzeugt einen Wert und ist ein Generator. Beispiel:


<?php
function myGenerator() {
 yield &#39;value1&#39;;
 yield &#39;value2&#39;;
}
Nach dem Login kopieren

Beim Aufruf der Generatorfunktion gibt PHP ein Objekt zurück, das zur Generator-Klasse gehört. Dieses Objekt kann mit der Funktion foreach() iteriert werden. Bei jeder Iteration fordert PHP die Instanz dieses Objekts auf, den nächsten zu iterierenden Wert zu berechnen und bereitzustellen. Die Eleganz des Generators besteht darin, dass der interne Status des Generators nach der Erzeugung jedes Werts weiterhin zwischen Pause und Wiederherstellung wechselt der Definitionskörper wird am Ende erreicht oder bis eine leere Return-Anweisung auftritt, zum Beispiel:


<?php
foreach (myGenerator() as $yieldedValue) {
 echo $yieldedValue, PHP_EOL;
}
Nach dem Login kopieren

Das obige Beispiel gibt

<🎜 aus >


value1
value2
Nach dem Login kopieren
2). Wie spart der Generator Speicher? Generieren Sie einen Wertebereich (falsche Richtung)


function makeRange($length) {
 $dataset = [];
 for ($i=0; $i < $length; $i++) {
 $dataset[] = $i;
 }
 return $dataset;
}

$customRange = makeRange(1000000);
foreach ($customeRange as $i) {
 echo $i, PHP_EOL;
}
Nach dem Login kopieren

预先创建了一个包含很大整数组成的数组,再看使用生成器的例子。


function makeRange($length) {
 for ($i = 0; $i < $length; $i++) {
 yield $i;
 }
}

foreach(makeRange(1000000) as $i) {
 echo $i, PHP_EOL;
}
Nach dem Login kopieren

在实际的例如迭代一个4GB大小的文件中功能中,迭代器大展身手。


function getRows($file) {
 $handle = fopen($file, &#39;rb&#39;);
 if ($handle === false) {
 throw new Exception();
 }
 //feof()函数检测是否到达文件末尾
 while (feof($handle) === false) {
 //fgetcsv()一次读取csv文件的一行
 yield fgetcsv($handle);
 }
 fclose($handle)
}

foreach (getRows(&#39;data.csv&#39;) as $row) {
 print_r($row);
}
Nach dem Login kopieren

3).生成器没有为PHP添加新功能,需要实现在数据集中执行快进、快退和查找,最好自己编写类实现Iterator接口,或者使用PHP标准库中的某个原生迭代器。

原生迭代器链接

总结

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Namespaces und Merkmalen in PHP sowie neuen Funktionen von Generatoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!