L’autoloading permet de charger automatiquement les classes.
Au lieu d’ajouter un
1 | require 'className.php'; |
à chaque fois que l’on a besoin d’une classe, on va créer un autoloader qui charge automatiquement les classes.
Pour créer un autoloader qui charge les classes à chaque fois qu’il rencontre une directive new comme dans :
1 | new className(); |
nous devons d’abord créer la fonction:
1 2 3 | function __autolad($class_name){ require 'class/' . $class_name . '.php'; } |
dès à présent nous n’avons plus besoin d’utiliser de
1 | require 'className.php'; |
C’est l’autoloader qui s’en charge maintenant d’inclure la déclaration de la classe.
L’inconvénient ici, c’est que toutes les classes doivent se trouver dans le dossier class/ et il n’est pas possible de déclarer d’autre autoloaders
La solution pour remédier à ce problème consiste ici à déclarer l’autoloader de cette manière
1 2 3 | function myAutoloader($class_name){ require 'class/' . $class_name . '.php'; } |
et d’utiliser la fonction
1 | spl_autoloader_register('myAutoloader'); |
qui enregistre la fonction myAutoloader() dans la pile __autoload()
Nous pourront ainsi déclarer plusieurs autoloaders
Une idée encore meilleure ici est de créer une classe Autoloader
1 2 3 4 5 6 7 8 | class Autoloader { static function register(){ spl_autoload_register(array(__CLASS__,'autoload')); } static function autoload($class_name){ require 'class/' . $class_name . '.php'; } } |
Il faudra ensuite inclure uniquement la classe Autoloader et appeler notre méthode register de Autoloader
1 2 | require 'class/autoloader.php'; Autoloader::register(); |
avant d’instancier nos classes.
De cette manière, il ne sera plus nécessaire d’inclure les déclarations de classes et il sera possible d’inclure d’autres autoloaders.