Depuis PHP 5.4 il est possible afin d'éviter les colisions de noms d'organiser son code PHP à l'aide d'espaces de noms.
Pour ce faire nous avons besoin de plusieurs éléments.
- Un répertoire qui contiendra les sources des fichiers php que nous souhaiterons utiliser.
- Un autoloader que nous placerons dans le fichier index du site ou le fichier main du programme.
- Les mots clés namespace sur les fichiers sources et use sur les fichiers qui utiliseront les bibliothéques.
Dans l'exemple suivant, nous allons créer une classe test qui sera accessible dans un fichier main. les différentes bibliothèques susceptibles d'être utilisées, le seront dans un répertoire intitulé src qu'ira parcourir l'autoloader.
1.Créer une bibiothèque source
Dans le répertoire principal contenant le programme php, on va créer un répertoire src contenant tous les répertoires contenant les bibliothéques ainsi on aura test, Views et controllers.
Dans controllers on aura notre fichier requeteController.php contenant la classe requeteController.
Pour des raisons de facilité de lecture, il est conseillé d'appeler la classe du même nom que le fichier, mais il est possible de l'appeler différemment. Lors de l'appel il faudra néanmoins spécifier la différence. Il est également possible de créer des modules contenant des objets autres que des classes, comme des tableaux, des interfaces, etc.
2.Code du fichier requeteController.php
On voit que l'espace de noms est matérialisé par la première ligne. l'appel dans le fichier principal se fera sur cet espace de noms.
3.Code du fichier main.php
L'appel à l'espace de nom s'effectue grâce au mot clé use. Toutefois l'appel ne peut aboutir si les fichiers de bibliothèques ne sont pas préalablement chargés par l'application. Contrairement à python ou la directive import charge le module et permet l'appel des classes. Dans PHP les deux traitements sont dissociés. C'est au fichier autoloader de charger les bibliothéques et de faire le lien entre l'espace de noms de la classe et l'arborescence de fichier. Quand l'autoloader trouve la correspondance, il effectue un require sur le fichier correspondant.
4.Code de autoloader.php
Si le fichier existe, alors il est chargé à l'aide d'un require.
C'est la fonction spl_autoload_reqister qui a ce rôle via une fonction passée en callback. Ici my_psr4_autoloader.