## El comando namespace y la constante __NAMESPACE__

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

PHP admite dos medios para acceder de manera abstracta a los elementos en el espacio de nombres actual, a saber, la constante mágica `__NAMESPACE__` y el comando `namespace`.

El valor de `__NAMESPACE__` es una cadena que contiene el nombre del espacio de nombres actual. En el espacio global, sin nombre, contiene una cadena vacía.

Ejemplo #1 Ejemplo con __NAMESPACE__, en un código con espacio de nombres

    <?php
    namespace MonProjet;

    echo '"', __NAMESPACE__, '"'; // muestra "MonProjet"

Ejemplo #2 Ejemplo con __NAMESPACE__, en un código con espacio de nombres global

    <?php
    echo '"', __NAMESPACE__, '"'; // muestra ""

La constante `__NAMESPACE__` es útil para construir dinámicamente nombres, como:

Ejemplo #3 Uso de __NAMESPACE__ para una construcción dinámica de nombres

    <?php
    namespace MonProjet;

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

El comando `namespace` también puede usarse para solicitar explícitamente un elemento del espacio de nombres actual, o de un subespacio. Es el equivalente para los espacios de nombres del operador `self` de las clases.

Ejemplo #4 El operador namespace, en un espacio de nombres

    <?php
    namespace MonProjet;

    use blah\blah as mine; // Ver "Uso de espacios de nombres: alias e importación"

    blah\mine(); // llama a la función MonProjet\blah\mine()
    namespace\blah\mine(); // llama a la función MonProjet\blah\mine()

    namespace\func(); // llama a la función MonProjet\func()
    namespace\sub\func(); // llama a la función MonProjet\sub\func()
    namespace\cname::method(); // llama al método estático "method" de la clase MonProjet\cname
    $a = new namespace\sub\cname(); // instancia un objeto de la clase MonProjet\sub\cname
    $b = namespace\CONSTANT; // asigna el valor de la constante MonProjet\CONSTANT a $b

Ejemplo #5 El operador namespace, en el espacio de nombres global

    <?php

    namespace\func(); // llama a la función func()
    namespace\sub\func(); // llama a la función sub\func()
    namespace\cname::method(); // llama al método estático "method" de la clase cname
    $a = new namespace\sub\cname(); // instancia un objeto de la clase sub\cname
    $b = namespace\CONSTANT; // asigna el valor de la constante CONSTANT a $b

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