El comando namespace y la constante __NAMESPACE__
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
PHP soporta 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 MiProyecto;
echo '"', __NAMESPACE__, '"'; // imprime "MiProyecto"
?>
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 MiProyecto;
function obtener($nombre_clase)
{
$a = __NAMESPACE__ . '\\' . $nombre_clase;
return new $a;
}
?>
El comando namespace
también puede ser utilizado 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 MiProyecto;
use blah\blah as mío; // véase "Uso de los espacios de nombres: Apodar/Importar"
blah\mío(); // llama a la función MiProyecto\blah\mío()
namespace\blah\mío(); // llama a la función MiProyecto\blah\mío()
namespace\func(); // llama a la función MiProyecto\func()
namespace\sub\func(); // llama a la función MiProyecto\sub\func()
namespace\nombrec::método(); // llama al método estático "método" de la clase MiProyecto\nombrec
$a = new namespace\sub\nombrec(); // instancia un objeto de la clase MiProyecto\sub\nombrec
$b = namespace\CONSTANTE; // asigna el valor de la constante MiProyecto\CONSTANTE 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\nombrec::método(); // llama al método estático "método" de la clase nombrec
$a = new namespace\sub\nombrec(); // instancia un objeto de la clase sub\nombrec
$b = namespace\CONSTANTE; // asigna el valor de la constante CONSTANTE a $b
?>