Heim > Backend-Entwicklung > PHP-Tutorial > Grundlagen der Verwendung von PHP-Namespaces

Grundlagen der Verwendung von PHP-Namespaces

伊谢尔伦
Freigeben: 2016-11-23 10:57:06
Original
1098 Leute haben es durchsucht

Bevor wir die Verwendung von Namespaces besprechen, müssen Sie verstehen, woher PHP weiß, welche Namespace-Elemente verwendet werden sollen. Es kann eine einfache Analogie zwischen dem PHP-Namespace und dem Dateisystem gezogen werden. Es gibt drei Möglichkeiten, auf eine Datei im Dateisystem zuzugreifen:

Relatives Dateinamenformat wie foo.txt. Es wird als currentdirectory/foo.txt geparst, wobei currentdirectory das aktuelle Verzeichnis darstellt. Wenn das aktuelle Verzeichnis also /home/foo ist, wird der Dateiname in /home/foo/foo.txt aufgelöst.

Das Format des relativen Pfadnamens ist beispielsweise Unterverzeichnis/foo.txt. Es wird als aktuelles Verzeichnis/Unterverzeichnis/foo.txt analysiert.

Der absolute Pfadname hat die Form /main/foo.txt. Es wird als /main/foo.txt geparst.

Elemente im PHP-Namespace verwenden das gleiche Prinzip. Beispielsweise kann auf einen Klassennamen auf drei Arten verwiesen werden:

als unqualifizierter Name oder als Klassenname ohne Präfix, z. B. $a=new foo(); oder foo::staticmethod();. 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 ein Name, der ein Präfix enthält, wie 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 Folgende ist ein Beispiel für die Verwendung dieser drei Methoden:

file1.php:

<?php
    namespace Foo\Bar\subnamespace;
    const FOO = 1;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }
?>
Nach dem Login kopieren

file2.php:

<?php
    namespace Foo\Bar;
    include &#39;file1.php&#39;;
    const FOO = 2;
    function foo() {}
    class foo
    {
        static function staticmethod() {}
    }
    /* 非限定名称 */
    foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo
    foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。
    echo FOO; // resolves to constant Foo\Bar\FOO
    /* 限定名称 */
    subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo
    subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,以及类的方法 staticmethod
    echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO
    /* 完全限定名称 */
    \Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo
    \Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod
    echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO
?>
Nach dem Login kopieren

Hinweis Um auf eine globale Klasse, Funktion oder Konstante zuzugreifen, können Sie einen vollständig qualifizierten Namen verwenden, z. B. strlen() oder Exception oder INI_ALL.

Beispiel #1 Zugriff auf globale Klassen, Funktionen und Konstanten innerhalb eines Namespace

<?php
    namespace Foo;
    function strlen() {}
    const INI_ALL = 3;
    class Exception {}
    $a = \strlen(&#39;hi&#39;); // 调用全局函数strlen
    $b = \INI_ALL; // 访问全局常量 INI_ALL
    $c = new \Exception(&#39;error&#39;); // 实例化全局类 Exception
?>
Nach dem Login kopieren


Verwandte Etiketten:
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