## Das Schlüsselwort namespace und die magische Konstante __NAMESPACE__

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

PHP unterstützt zwei Arten des abstrakten Zugriffs auf Elemente innerhalb eines Namespaces, die magische Konstante `__NAMESPACE__` und das Schlüsselwort `namespace`.

Der Wert von `__NAMESPACE__` ist ein String, der den Namen des aktuellen Namespace beinhaltet. In globalem Code ohne Namespaces beinhaltet dies einen leeren String.

Beispiel #1 __NAMESPACE__-Beispiel, Code mit Namespace

    <?php
    namespace MyProject;

    echo '"', __NAMESPACE__, '"'; // gibt "MyProject" aus
    ?>

Beispiel #2 __NAMESPACE__-Beispiel, globaler Code

    <?php

    echo '"', __NAMESPACE__, '"'; // gibt "" aus
    ?>

Die Konstante `__NAMESPACE__` ist nützlich, um dynamische Namen zu konstruieren, zum Beispiel:

Beispiel #3 __NAMESPACE__ zur dynamischen Namenszusammensetzung verwenden

    <?php
    namespace MyProject;

    function get($classname)
    {
        $a = __NAMESPACE__ . '\\' . $classname;
        return new $a;
    }
    ?>

Das Schlüsselwort `namespace` kann verwendet werden, um explizit ein Element des aktuellen Namespaces oder eines untergeordneten Namespaces anzufordern. Es ist das äquivalent der Namespaces zum `self`-Operator für Klassen.

Beispiel #4 Der namespace-Operator, innerhalb eines Namespace

    <?php
    namespace MyProject;

    use blah\blah as mine; // siehe "Namespaces verwenden: Aliase/Importieren"

    blah\mine(); // ruft die Funktion MyProject\blah\mine() auf
    namespace\blah\mine(); // ruft die Funktion MyProject\blah\mine() auf

    namespace\func(); // ruft die Function MyProject\func() auf
    namespace\sub\func(); // ruft die Function MyProject\sub\func() auf
    namespace\cname::method(); // ruft die statische Methode "method" der Klasse MyProject\cname auf
    $a = new namespace\sub\cname(); // erzeugt ein Objekt der Klasse MyProject\sub\cname
    $b = namespace\CONSTANT; // weist den Wert der Konstante MyProject\CONSTANT $b zu
    ?>

Beispiel #5 Der namespace-Operator, in globalem Code

    <?php

    namespace\func(); // ruft die Function func() auf
    namespace\sub\func(); // ruft die Function sub\func() auf
    namespace\cname::method(); // ruft die statische Methode "method" der Klasse cname auf
    $a = new namespace\sub\cname(); // erzeugt ein Objekt der Klasse sub\cname
    $b = namespace\CONSTANT; // weist den Wert der Konstante CONSTANT $b zu
    ?>

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open