Espacios de nombres y características dinámicas del lenguaje

(PHP 5 >= 5.3.0, PHP 7)

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

Ejemplo #1 Acceder dinámicamente a elementos

ejemplo1.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
?>
se debe emplear el nombre completamente cualificado (nombre de clase con prefijo de espacio de nombres). Observe que, debido a que no hay diferencia entre un nombre cualificado y uno completamente cualificado dentro de un nombre de clase, función, o constante dinámicas, no es necesario la barra invertida inicial.

Ejemplo #2 Acceder dinámicamente a elementos de un espacio 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
?>

Asegúrese de leer la nota sobre escapar nombres de espacios de nombres en cadenas.