Espaces de noms et langage dynamique

L'impl�mentation des espaces de noms de PHP est influenc�e par sa nature dynamique de langage de programmation. Par cons�quent, pour convertir du code tel que le code de l'exemple suivant, en un espace de noms :

Exemple #1 Acc�s dynamique aux �l�ments

example1.php:

<?php
class classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "global";

$a 'classname';
$obj = new $a// affiche classname::__construct
$b 'funcname';
$b(); // affiche funcname
echo constant('constname'), "\n"// affiche global
?>

Il faut utiliser un nom absolu (le nom de la classe, avec son pr�fixe d'espace de noms). Notez qu'il n'y a pas de diff�rence entre un nom absolu et un nom qualifi� dans un nom de classe, de fonction ou de constante dynamique, ce qui fait que l'anti-slash initial n'est pas n�cessaire.

Exemple #2 Acc�s dynamique � des espaces de noms

<?php
namespace nomdelespacedenoms;
class 
classname
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
funcname()
{
    echo 
__FUNCTION__,"\n";
}
const 
constname "namespaced";

include 
'example1.php';

$a 'classname';
$obj = new $a// affiche classname::__construct
$b 'funcname';
$b(); // affiche funcname
echo constant('constname'), "\n"// affiche global

/* Note que si vous utilisez des guillemets doubles, "\\nomdelespacedenoms\\classname" doit �tre utilis� */
$a '\nomdelespacedenoms\classname';
$obj = new $a// affiche nomdelespacedenoms\classname::__construct
$a 'nomdelespacedenoms\classname';
$obj = new $a// affiche aussi nomdelespacedenoms\classname::__construct
$b 'nomdelespacedenoms\funcname';
$b(); // affiche nomdelespacedenoms\funcname
$b '\nomdelespacedenoms\funcname';
$b(); // affiche aussi nomdelespacedenoms\funcname
echo constant('\nomdelespacedenoms\constname'), "\n"// affiche namespaced
echo constant('nomdelespacedenoms\constname'), "\n"// affiche aussi namespaced
?>

Il est recommand� de lire la note au sujet de la protection des espaces de noms dans les cha�nes.