Espaces de noms et langage dynamique
(PHP 5 >= 5.3.0)
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
<?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
?>
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.