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.