Autochargement des classes en POO en PHP
Vous savez déjà que pour utiliser
une classe quelconque, nous devons l'inclure
via require. Lorsqu'un projet contient
beaucoup de classes, cela génère de nombreuses
inclusions, qui sont très inconfortables à écrire
et difficiles à contrôler.
Pour résoudre ce problème, l'autochargement des classes a été ajouté en PHP. L'autochargement permet à PHP de charger automatiquement le fichier d'une classe lors d'une tentative d'accès à cette classe dans le code. Cependant, les classes ne se chargeront pas toutes seules - elles doivent être placées dans les dossiers du site d'une manière spéciale, en suivant une certaine convention de nommage des fichiers et des dossiers de classes. On peut utiliser la convention intégrée à PHP, ou inventer la sienne et l'utiliser.
Commençons par analyser la convention standard de PHP. Cette convention consiste dans le fait que si nous avons un certain fichier avec une classe, alors le chemin d'accès dans les dossiers du site vers ce fichier doit correspondre à l'espace de noms du fichier, et le nom du fichier doit correspondre au nom de la classe qu'il contient. De plus, les noms des dossiers et du fichier doivent être en minuscules.
Regardons un exemple. Supposons que nous ayons la classe suivante :
<?php
namespace Core\Admin;
class PageController
{
}
?>
Selon la convention, cette classe doit être située
dans le dossier /core/admin/ dans le fichier
pagecontroller.php.
Utilisons maintenant notre classe dans le fichier index.php,
sans l'inclure via require,
mais en utilisant l'autochargement. Pour cela, au début
du fichier dans lequel les classes sont appelées, il faut
appeler la fonction spl_autoload_register.
Faisons-le :
<?php
spl_autoload_register(); // activons l'autochargement
$obj = new Core\Admin\PageController; // créons tranquillement un objet
?>
Dans le fichier index.php, activez le chargement automatique
des classes. En suivant la convention de nommage
des dossiers et fichiers, créez la classe Core\User,
la classe Core\Admin\Controller et la classe
Project\User\Data. Dans le fichier index.php,
créez des objets de ces classes.