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

  1. <?php
  2. namespace MonProjet;
  3.  
  4. echo '"', __NAMESPACE__, '"'; // affiche "MonProjet"
  5. ?>

Exemple #2 Exemple avec __NAMESPACE__, dans un code avec espace de noms global

  1. <?php
  2.  
  3. echo '"', __NAMESPACE__, '"'; // affiche ""
  4. ?>
La constante __NAMESPACE__ est utile pour construire dynamiquement des noms, tels que :

Exemple #3 Utilisation de __NAMESPACE__ pour une construction dynamique de noms

  1. <?php
  2. namespace MonProjet;
  3.  
  4. function get($classname)
  5. {
  6. $a = __NAMESPACE__ . '\\' . $classname;
  7. return new $a;
  8. }
  9. ?>

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

  1. <?php
  2. namespace MonProjet;
  3.  
  4. use blah\blah as mine; // Voyez "Utilisation des espaces de noms : importation et alias"
  5.  
  6. blah\mine(); // appelle la fonction MonProjet\blah\mine()
  7. namespace\blah\mine(); // appelle la fonction MonProjet\blah\mine()
  8.  
  9. namespace\func(); // appelle la fonction MonProjet\func()
  10. namespace\sub\func(); // appelle la fonction MonProjet\sub\func()
  11. namespace\cname::method(); // appelle la méthode statique "method" de la classe MonProjet\cname
  12. $a = new namespace\sub\cname(); // instantie un objet de la classe MonProjet\sub\cname
  13. $b = namespace\CONSTANT; // assigne la valeur de la constante MonProjet\CONSTANT à $b
  14. ?>

Exemple #5 l'opérateur namespace, dans l'espace de noms global

  1. <?php
  2.  
  3. namespace\func(); // appelle la fonction func()
  4. namespace\sub\func(); // appelle la fonction sub\func()
  5. namespace\cname::method(); // appelle la méthode statique "method" de la classe cname
  6. $a = new namespace\sub\cname(); // instantie un objet de la classe sub\cname
  7. $b = namespace\CONSTANT; // assigne la valeur de la constante CONSTANT à $b
  8. ?>

LoadingChargement en cours