Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Namespace und automatisches Laden

PHP-Namespace und automatisches Laden

不言
不言Original
2018-05-14 15:50:011662Durchsuche

Dieser Artikel stellt den Namespace und das automatische Laden von PHP vor. Jetzt kann ich ihn mit Ihnen teilen.

Einführung

Wir haben darüber gesprochen Vorhin habe ich das automatische Laden von Klassen durchgeführt, und dann habe ich darüber nachgedacht.

Wenn wir Code schreiben, rufen wir jedes Mal andere Klassen in einer anderen Datei auf.
Wir schreiben diese Methode nicht spl_autoload_register? Wie haben wir es also erreicht?

Prinzip

Es stellt sich heraus, dass unser PHP das Konzept des Namespace in 5.3 eingeführt hat (dies ist einer der Gründe, warum die meisten Frameworks Versionen vor 5.3 nicht unterstützen)

Jeder kennt sich bis zu einem gewissen Grad mit Namespaces aus: Wenn Sie es nicht wissen gehen Sie in die Ecke und denken Sie darüber nach

Namespace ist einfach eine Art Bezeichner und sein Hauptzweck besteht darin, Namenskonflikte zu lösen . Frage.

Wie im täglichen Leben gibt es viele Menschen mit demselben Namen. Wie kann man diese Menschen unterscheiden? Dann müssen Sie einige zusätzliche Logos hinzufügen.

Es scheint gut, Ihren Arbeitsplatz als Logo zu verwenden, damit Sie sich keine Sorgen über die Peinlichkeit einer „Namenskollision“ machen müssen.

Namespace-Klassifizierung
  • [ ] Vollqualifizierter Namespace

  • [ ] Qualifizierter Namespace

new 百度\李彦宏(); // 限定类名new \百度\李彦宏(); // 完全限定类名

Wenn der aktuelle Namespace nicht deklariert ist, sind qualifizierte Klassennamen und vollqualifizierte Klassennamen gleichwertig. Denn wenn kein Leerzeichen angegeben ist, wird standardmäßig global() verwendet.

namespace 谷歌;new 百度\李彦宏(); // 谷歌\百度\李彦宏(实际结果)new \百度\李彦宏(); // 百度\李彦宏(实际结果)

Dieses Beispiel zeigt den Unterschied zwischen der Verwendung qualifizierter Klassennamen und vollständig qualifizierter Klassennamen in Namespaces. (Vollqualifizierter Klassenname = aktueller Namespace + qualifizierter Klassenname)

/* 导入命名空间 */use 百度\李彦宏;new 李彦宏(); // 百度\李彦宏(实际结果)/* 设置别名 */use 百度\李彦宏 AS CEO;new CEO(); // 百度\李彦宏(实际结果)/* 任何情况 */new \百度\李彦宏();// 百度\李彦宏(实际结果)

Bei Verwendung des Namespace wird nur der Klassenname vorangestellt, was weniger Konflikte verursacht und das System ihn trotzdem nicht automatisch importiert.

Wenn die Datei nicht importiert wird, löst das System die Funktion __autoload aus und übergibt den qualifizierten Klassennamen als Parameter, bevor der Fehler „Klasse nicht gefunden“ ausgegeben wird.

Die obigen Beispiele basieren also alle auf der Situation, dass Sie die relevanten Dateien manuell eingegeben haben, andernfalls gibt das System „Klasse ‚Baidu Robin Li‘ nicht gefunden“ aus.

Nach der Einführung des Namespace wurde das automatische Laden der

-Klasse eingeführt. Wir haben Ihnen bereits davon erzählt, als wir über spl_autoload_register gesprochen haben. Heute werden wir über eine weitere

__autoload()


PHP-Funktion __autoload sprechen. Bevor diese Funktion erschien, musste die Datei „Include“ verwenden, wenn in einer PHP-Datei auf 100 Objekte verwiesen wurde oder es müssen 100 Klassendateien eingeführt werden, was dazu führt, dass die PHP-Datei extrem groß wird. Es gibt also diese __autoload-Funktion.

Wann wird die __autoload-Funktion aufgerufen? Wenn das neue Schlüsselwort in einer PHP-Datei zum Instanziieren eines Objekts verwendet wird und die Klasse in dieser PHP-Datei nicht definiert ist, wird die Funktion __autoload ausgelöst. Zu diesem Zeitpunkt kann die PHP-Datei eingeführt werden, die die Klasse definiert , Die Instanziierung war erfolgreich. (Hinweis: Wenn das Objekt, das instanziiert werden muss, die Definition der Klasse in dieser Datei gefunden hat, wird die Funktion __autoload nicht ausgelöst)

Der Unterschied zwischen ihr und spl_autoload_register ist

Wenn __autoload und spl_autoload_register gleichzeitig in der Datei erscheinen, hat spl_autoload_register Vorrang

Verwandte Empfehlungen:

PHP-Download-Funktion

PHP-Druckprobleme

Über den PHP-Namespace

Das obige ist der detaillierte Inhalt vonPHP-Namespace und automatisches Laden. 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