Espacios de nombres y lenguaje dinámico

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

La implementación de los espacios de nombres de PHP está influenciada por su naturaleza dinámica de lenguaje de programación. Por lo tanto, para convertir el código como el del ejemplo siguiente, en un espacio de nombres:

Ejemplo #1 Acceso dinámico a los elementos

example1.php:

<?php
class nombre_clase
{
function
__construct()
{
echo
__METHOD__,"\n";
}
}
function
nombre_func()
{
echo
__FUNCTION__,"\n";
}
const
nombre_const = "global";

$a = 'nombre_clase';
$obj = new $a; // imprime nombre_clase::__construct
$b = 'nombre_func';
$b(); // imprime nombre_func
echo constant('nombre_const'), "\n"; // imprime global
?>
Es necesario utilizar un nombre absoluto (el nombre de la clase, con su prefijo de espacio de nombres). Tenga en cuenta que no hay diferencia entre un nombre absoluto y un nombre calificado en un nombre de clase, función o constante dinámica, lo que hace que el antislash inicial no sea necesario.

Ejemplo #2 Acceso dinámico a los espacios de nombres

<?php
namespace nombre_espacio_de_nombres;
class
nombre_clase
{
function
__construct()
{
echo
__METHOD__,"\n";
}
}
function
nombre_func()
{
echo
__FUNCTION__,"\n";
}
const
nombre_const = "de espacio de nombres";

/* observe que si se emplean comillas dobles, se debe usar "\\nombre_espacio_de_nombres\\nombre_clase" */
$a = '\nombre_espacio_de_nombres\nombre_clase';
$obj = new $a; // imprime nombre_espacio_de_nombres\nombre_clase::__construct
$a = 'nombre_espacio_de_nombres\nombre_clase';
$obj = new $a; // también imprime nombre_espacio_de_nombres\nombre_clase::__construct
$b = 'nombre_espacio_de_nombres\nombre_func';
$b(); // imprime nombre_espacio_de_nombres\nombre_func
$b = '\nombre_espacio_de_nombres\nombre_func';
$b(); // también imprime nombre_espacio_de_nombres\nombre_func
echo constant('\nombre_espacio_de_nombres\nombre_const'), "\n"; // imprime de espacio de nombres
echo constant('nombre_espacio_de_nombres\nombre_const'), "\n"; // también imprime de espacio de nombres
?>

Se recomienda leer la nota sobre la protección de los espacios de nombres en las cadenas.