Heim >Backend-Entwicklung >PHP-Problem >Detaillierte Erläuterung der Verwendung des PHP-Namespace
php-Namespace bezieht sich auf den Namespace. So verwenden Sie ihn: Erstellen Sie zunächst eine PHP-Beispieldatei. Definieren Sie dann den Code im Namespace „MyProject“.
PHP-Namespace (Namespace)
PHP-Namespace (Namespace) wurde in PHP 5.3 hinzugefügt. Wenn Sie C# und Java studiert haben, ist Namespace nichts Neues. Allerdings hat es in PHP immer noch eine sehr wichtige Bedeutung.
Der PHP-Namespace kann die folgenden zwei Arten von Problemen lösen:
Namenskonflikte zwischen vom Benutzer geschriebenem Code und internen Klassen/Funktionen/Konstanten von PHP oder Klassen/Funktionen/Konstanten von Drittanbietern.
Erstellen Sie einen Aliasnamen (oder Kurznamen) für einen sehr langen Bezeichnernamen (der normalerweise zur Linderung des ersten Problemtyps definiert wird), um die Lesbarkeit des Quellcodes zu verbessern.
Namespaces definieren
Standardmäßig werden alle Konstanten-, Klassen- und Funktionsnamen im globalen Raum platziert, genau wie vor den von PHP unterstützten Namespaces.
Ein Namespace wird mit dem Schlüsselwort namespace deklariert. Wenn eine Datei einen Namespace enthält, muss sie den Namespace vor dem gesamten anderen Code deklarieren. Das Syntaxformat ist wie folgt:
<?php // 定义代码在 'MyProject' 命名空间中 namespace MyProject; // ... 代码 ...
Sie können auch verschiedene Namespace-Codes in derselben Datei definieren, wie zum Beispiel:
<?php namespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } namespace AnotherProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
Es wird nicht empfohlen, diese Syntax zu verwenden, um mehrere Namespaces in einer einzigen Datei zu definieren. Es wird empfohlen, die folgende Syntax in geschweiften Klammern zu verwenden.
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } ?>
Um globalen Nicht-Namespace-Code mit Namespace-Code zu kombinieren, können Sie nur die Syntax mit geschweiften Klammern verwenden. Globaler Code muss in geschweifte Klammern mit einer unbenannten Namespace-Anweisung eingeschlossen werden, zum Beispiel:
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // 全局代码 session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?>
Der einzige zulässige Code vor der Deklaration eines Namespace ist die Declare-Anweisung, die definiert, wie die Quelldatei codiert wird. Jeglicher Nicht-PHP-Code, einschließlich Leerzeichen, darf nicht vor einer Namespace-Deklaration stehen.
<?php declare(encoding='UTF-8'); //定义多个命名空间和不包含在命名空间中的代码 namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace { // 全局代码 session_start(); $a = MyProject\connect(); echo MyProject\Connection::start(); } ?>
Der folgende Code verursacht einen Syntaxfehler:
<html> <?php namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
Subnamespace
Ähnlich wie die Beziehung zwischen Verzeichnissen und Dateien ermöglichen PHP-Namespaces auch die Angabe der Namen hierarchischer Namespaces. Daher können Namespace-Namen hierarchisch definiert werden:
<?php namespace MyProject\Sub\Level; //声明分层次的单个命名空间 const CONNECT_OK = 1; class Connection { /* ... */ } function Connect() { /* ... */ } ?>
Das obige Beispiel erstellt die Konstante MyProjectSubLevelCONNECT_OK, die Klasse MyProjectSubLevelConnection und die Funktion MyProjectSubLevelConnect.
Namespace-Verwendung
Klassennamen in PHP-Namespaces können auf drei Arten referenziert werden:
unqualifizierte Namen oder Klassennamen, die kein Präfix enthalten, wie z. B. $a=new foo( ); ;. Wenn der aktuelle Namespace currentnamespace ist, wird foo in currentnamespacefoo aufgelöst. Wenn der Code, der foo verwendet, global ist und keinen Code in einem Namespace enthält, wird foo als foo aufgelöst. Warnung: Wenn eine Funktion oder Konstante im Namespace undefiniert ist, wird der unqualifizierte Funktions- oder Konstantenname in einen globalen Funktions- oder Konstantennamen aufgelöst.
Qualifizierter Name oder Name einschließlich Präfix, z. B. $a = new subnamespacefoo(); oder subnamespacefoo::staticmethod();. Wenn der aktuelle Namespace currentnamespace ist, wird foo in currentnamespacesubnamespacefoo aufgelöst. Wenn der Code, der foo verwendet, global ist und der Code in keinem Namespace enthalten ist, wird foo in den Subnamespacefoo aufgelöst.
Vollständig qualifizierter Name oder ein Name, der einen globalen Präfixoperator enthält, zum Beispiel $a = new currentnamespacefoo(); oder currentnamespacefoo::staticmethod();. In diesem Fall wird foo im Code immer in den Literalnamen currentnamespacefoo aufgelöst.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des PHP-Namespace. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!