Article mis à jour le : 05-05-2022
Petites explications concernant les espaces de noms - namespaces - en PHPApparus 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;
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 :
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 :
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 :
Pour connaître le namespace actuel, il vous suffit d'utiliser la constante __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.
Pouvez créer des alias facilement. Pour cela il suffit d'utiliser le mot-clef "as". Par exemple :
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: