L’autoloading dans PHP

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *