Heim >Backend-Entwicklung >PHP-Problem >Detaillierte Erläuterung der Verwendung des PHP-Namespace

Detaillierte Erläuterung der Verwendung des PHP-Namespace

PHPz
PHPzOriginal
2020-09-25 14:24:512781Durchsuche

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“.

Detaillierte Erläuterung der Verwendung des PHP-Namespace

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  
// 定义代码在 &#39;MyProject&#39; 命名空间中  
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=&#39;UTF-8&#39;); //定义多个命名空间和不包含在命名空间中的代码
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!

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