Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Les espaces de noms en PHP

Article posté le 08-01-2014 dans la catégorie PHP

Apparus avec PHP 5.3, les espaces de noms, ou namespaces, permettent de séparer desconstantes, des fonctions et des classes dans différents "espaces", et ceci dans un but d'éviter tout conflit dans le cas où ils portent le même nom. On peut ainsi imaginer, qu'un namespace est au PHP ce qu'un dossier est au rangement  de vos fichiers

Par défaut, il existe un déja un namespace : global;

1- Déclaration

Par usage, on ne déclare qu'un seul espace de nom par fichier, mais il est possible, mais déconseillé d'en mettre plusieurs dans le même.

Déclaration :

namespace monEspaceDeNom
{
    //Tout ce qui est déclaré ici fera partie de l'espace de nom
}

Un problème se pose, si je souhaite appeler une fonction du namespace global, par exemple une fonction native de PHP mais dont j'ai déclaré une homonyme dans mon namespace...

Pour cela il suffit de précéder votre appel d'un backslash :

\nomDeLaFonction();

Si la variable ou la fonction que vous appelez dans votre namespace n'existe pas (n'est pas déclarée dans votre namespace), alors PHP ira la chercher dans le namespace global, mais cela ne s'applique pas classes, En fait, ce sera uniquement le cas si le nom de l'élément que vous appelez est dit "non qualifié" (voir plus bas). Si par contre l'élément est "qualifié", c'est à dire que vous insistez pour appeler la fonction de votre namespace, alors là vous aurez droit à une belle erreur PHP.

Si vous souhaitez appeler une fonction d'un autre namespace, vous devez d'abord appeler ce namespace dans celui où vous vous trouvez, mais également précéder la fonction du nom du namespace et d'un backslash :

namespace unAutreEspaceDeNom
{
    use monEspaceDeNom; //Appel du premier namespace
    monEspaceDeNom\toutou(); //Appel de son fonction
}

2- Dans quel namespace suis-je?

Pour connaître le namespace actuel, il vous suffit d'utiliser la constante __NAMESPACE__.

echo __NAMESPACE__;

Par contre, elle n'est utilisable que dans un espace de nom déclaré, pas dans le global. Ainsi, en quelque sorte, on peut comparer le mot-clef NAMESPACE au mot-clef self que vous utilisez en POO pour appeler les variables et méthodes statiques, et autres constantes de classes.

3- Cher namespace, êtes vous qualifié?

4- Créer des alias

Pouvez créer des alias facilement. Pour cela il suffit d'utiliser le mot-clef "as". Par exemple :

use X as blabla

vous créera un alias où blabla point vers le namspace X.

Vous pouvez aussi créer un alias pointant vers plusieurs namespace, il suffit de séparer tout cela par des backslash, et de les mettres les uns à la suite des autres:

namespace encoreUnAutreEspaceDeNom
{
    use monEspaceDeNom\monEspaceDeNom as alias; //alias pointe vers les deux espaces de noms précédemment déclarés
}

Cet article vous a plu? Découvrez d'autres articles


Tweet
comments powered by Disqus