Heim  >  Artikel  >  Backend-Entwicklung  >  Übersicht und Definition des PHP-Namespace

Übersicht und Definition des PHP-Namespace

伊谢尔伦
伊谢尔伦Original
2016-11-23 11:05:421043Durchsuche

Namespace-Übersicht

Was ist ein Namespace? Im Großen und Ganzen ist ein Namespace eine Möglichkeit, Dinge zu kapseln. Dieses abstrakte Konzept findet sich vielerorts. Verzeichnisse werden beispielsweise in Betriebssystemen verwendet, um zusammengehörige Dateien zu gruppieren, und sie fungieren als Namespaces für die Dateien im Verzeichnis. Beispielsweise kann die Datei foo.txt gleichzeitig in den Verzeichnissen /home/greg und /home/other vorhanden sein, zwei foo.txt-Dateien können jedoch nicht im selben Verzeichnis vorhanden sein. Wenn wir außerdem auf die Datei foo.txt außerhalb des Verzeichnisses /home/greg zugreifen, müssen wir den Verzeichnisnamen und das Verzeichnistrennzeichen vor den Dateinamen setzen, um /home/greg/foo.txt zu erhalten. Die Anwendung dieses Prinzips auf den Bereich der Programmierung ist das Konzept des Namespace.

In PHP werden Namespaces verwendet, um zwei Arten von Problemen zu lösen, die beim Erstellen von wiederverwendbarem Code wie Klassen oder Funktionen beim Schreiben von Klassenbibliotheken oder Anwendungen auftreten:

Namenskonflikte zwischen vom Benutzer geschriebenem Code und PHP-intern Klassen/Funktionen/Konstanten oder Klassen/Funktionen/Konstanten von Drittanbietern.

Erstellen Sie einen Aliasnamen (oder Kurznamen) für einen sehr langen Bezeichnernamen (normalerweise definiert, um die erste Art von Problem zu mildern), um die Lesbarkeit des Quellcodes zu verbessern.

PHP-Namespaces bieten eine Möglichkeit, verwandte Klassen, Funktionen und Konstanten zu gruppieren. Das Folgende ist ein Beispiel, das die PHP-Namespace-Syntax veranschaulicht:

Beispiel Nr. 1 Namespace-Syntax-Beispiel

<?php
    namespace my\name; 
    class MyClass {}
    function myfunction() {}
    const MYCONST = 1;
    $a = new MyClass;
    $c = new \my\name\MyClass; 
    $a = strlen(&#39;hi&#39;); 
    $d = namespace\MYCONST; 
    $d = __NAMESPACE__ . &#39;\MYCONST&#39;;
    echo constant($d); 
?>

PHP beginnt mit der Unterstützung von Namespaces in Versionen nach 5.3.0.

Namespaces definieren

Obwohl jeder legale PHP-Code in einem Namespace enthalten sein kann, gibt es nur drei Arten von Code, die von Namespaces betroffen sind: Klassen, Funktionen und Konstanten.

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.

Beispiel #1 Deklarieren Sie einen einzelnen Namespace

<?php
    namespace MyProject;
    const CONNECT_OK = 1;
    class Connection { /* ... */ }
    function connect() { /* ... */ }
?>

Der einzige zulässige Code vor der Deklaration eines Namespace ist die Declare-Anweisung, die zum Definieren der Quelldateikodierung verwendet wird. Darüber hinaus darf der gesamte Nicht-PHP-Code, einschließlich Leerzeichen, nicht vor der Namespace-Deklaration erscheinen:

Beispiel #2 Deklaration eines einzelnen Namespace

<html>
<?php
    namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句
?>

Außerdem unterscheidet es sich von anderen Sprachfunktionen von PHP kann derselbe Namespace in mehreren Dateien definiert werden, wodurch der Inhalt desselben Namespace aufgeteilt und in verschiedenen Dateien gespeichert werden kann.

Unternamespaces definieren

Ähnlich wie die Beziehung zwischen Verzeichnissen und Dateien ermöglichen Ihnen PHP-Namespaces auch die Angabe hierarchischer Namespace-Namen. Daher können Namespace-Namen hierarchisch definiert werden:

Beispiel #1 Deklarieren eines hierarchischen einzelnen Namespace

<?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 MyProjectSubLevelConnection.


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