La commande namespace et la constante __NAMESPACE__
(PHP 5 >= 5.3.0)
PHP supporte deux moyens pour accéder de manière abstraite aux éléments
dans l'espace de nom courant, à savoir la constante magique
__NAMESPACE__
et la commande namespace.
La valeur de __NAMESPACE__
est une chaîne qui contient le nom
de l'espace de noms courant. Dans l'espace global, sans nom, elle contient
une chaîne vide.
Exemple #1 Exemple avec __NAMESPACE__, dans un code avec espace de noms
<?php namespace MonProjet; echo '"', __NAMESPACE__, '"'; // affiche "MonProjet" ?>
Exemple #2 Exemple avec __NAMESPACE__, dans un code avec espace de noms global
<?php echo '"', __NAMESPACE__, '"'; // affiche "" ?>
__NAMESPACE__
est utile pour construire
dynamiquement des noms, tels que :
Exemple #3 Utilisation de __NAMESPACE__ pour une construction dynamique de noms
<?php namespace MonProjet; function get($classname) { $a = __NAMESPACE__ . '\\' . $classname; return new $a; } ?>
La commande namespace peut aussi être utilisée pour demander explicitement un élément de l'espace de noms courant, ou d'un sous-espace. C'est l'équivalent pour les espaces de noms de l'opérateur self des classes.
Exemple #4 l'opérateur namespace, dans un espace de noms
<?php namespace MonProjet; use blah\blah as mine; // Voyez "Utilisation des espaces de noms : importation et alias" blah\mine(); // appelle la fonction MonProjet\blah\mine() namespace\blah\mine(); // appelle la fonction MonProjet\blah\mine() namespace\func(); // appelle la fonction MonProjet\func() namespace\sub\func(); // appelle la fonction MonProjet\sub\func() namespace\cname::method(); // appelle la méthode statique "method" de la classe MonProjet\cname $a = new namespace\sub\cname(); // instantie un objet de la classe MonProjet\sub\cname $b = namespace\CONSTANT; // assigne la valeur de la constante MonProjet\CONSTANT à $b ?>
Exemple #5 l'opérateur namespace, dans l'espace de noms global
<?php namespace\func(); // appelle la fonction func() namespace\sub\func(); // appelle la fonction sub\func() namespace\cname::method(); // appelle la méthode statique "method" de la classe cname $a = new namespace\sub\cname(); // instantie un objet de la classe sub\cname $b = namespace\CONSTANT; // assigne la valeur de la constante CONSTANT à $b ?>