## La commande namespace et la constante __NAMESPACE__

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

PHP supporte deux moyens pour accéder de manière abstraite aux éléments dans l'espace de noms courant, à savoir la constante magique `__NAMESPACE__` et la commande `namespace`.

La valeur de `__NAMESPACE__` est une chaîne qui contient le nom du namespace 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 ""

La constante `__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 du namespace 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 : alias et importation"

    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(); // instancie 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 le namespace 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(); // instancie un objet de la classe sub\cname
    $b = namespace\CONSTANT; // assigne la valeur de la constante CONSTANT à $b

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open