AutoLoad
Méthode : spl_autoload_register()
On a vu qu'il fallait inclure le fichier contenant la définition de la classe avant de l'utiliser.
Ce qui nous oblige à ajouter pour chaque classe différente un require.
Afin de simplifier notre programmation, le PHP a prévu une fonction capable de réaliser le require dans le cas où la classe n'est pas connue.
spl_autoload_register();
Méthode : Autoload
Le principe de cet autoload est de lancer une fonction interne à chaque fois qu'une classe non déclarée cherche à créer une instance.
Pour cela, il nous faut ajouter une fonction à notre autoloading.
spl_autoload_register(function($class) {
require_once $class . '.php';
});
L'interpréteur va désormais rechercher des fichiers portant le même nom que la classe.
require_once : permet de ne charger qu'une seul fois le fichier.
Exemple : Exemple
Identite.php
class Identite
{
...
}
autoload.php
spl_autoload_register(function($class){
require_once $class . '.php';
});
exemple.php
require 'autoload.php';
$utilisateur = new Identite('vanneste','vincent');
Remarque : Vérification
Avant de charger les fichiers dans l'autoload, on peut vérifier leur existence
spl_autoload_register(function($class){
$file = join(DIRECTORY_SEPARATOR, [$path, $class.'.php']) ;
if(file_exists($file))
return require_once $file;
});
Il est possible que les fichiers ne soient pas dans le même dossier.
On peut préciser les chemins possibles et les tester.
spl_autoload_register(function($class){
$paths = array(
join(DIRECTORY_SEPARATOR, [__DIR__]),
join(DIRECTORY_SEPARATOR, [__DIR__, 'Projet']),
join(DIRECTORY_SEPARATOR, [__DIR__, '..', 'src'])
);
foreach($paths as $path){
$file = join(DIRECTORY_SEPARATOR, [$path, $class.'.php']) ;
if(file_exists($file))
return require_once $file;
}
});