De nombreux développeurs qui écrivent des applications orientées objet créent un fichier source par définition de classe. Un des plus gros inconvénients de cette méthode est d'avoir à écrire une longue liste d'inclusions de fichier de classes au début de chaque script : une inclusion par classe.
La fonction spl_autoload_register() enregistre un nombre quelconque de chargeurs automatiques, ce qui permet aux classes et aux interfaces d'être automatiquement chargées si elles ne sont pas définies actuellement. En enregistrant des autochargeurs, PHP donne une dernière chance d'inclure une définition de classe ou interface, avant que PHP n'échoue avec une erreur.
Antérieur à PHP 8.0.0, il était possible d'utiliser __autoload() pour autocharger les classes et interfaces. Cependant c'est une alternative moins flexible à spl_autoload_register() et __autoload() est obsolète à partir de PHP 7.2.0, et supprimée à partir de PHP 8.0.0.
Exemple #1 Exemple avec __autoload()
Cet exemple tente de charger les classes MaClasse1
et MaClasse2
, respectivement depuis les fichiers
MaClasse1.php et
MaClasse2.php.
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MaClasse1();
$obj2 = new MaClasse2();
?>
Exemple #2 Autre exemple d'auto-chargement
Cet exemple tente de charger l'interface ITest
.
<?php
spl_autoload_register(function ($name) {
var_dump($name);
});
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
Exemple #3 Auto-chargement avec gestion des exceptions
Cet exemple lance une exception et montre comment la traiter avec un bloc try/catch.
<?php
spl_autoload_register(function ($name) {
echo "Tentative de chargement de $name.\n";
throw new Exception("Impossible de charger $name.");
});
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
L'exemple ci-dessus va afficher :
Tentative de chargement de NonLoadableClass. Impossible de charger NonLoadableClass.
Exemple #4 Auto-chargement avec gestion des exceptions. Exception personnalisée manquante
Cet exemple lance une exception personnalisée non-chargeable.
<?php
spl_autoload_register(function ($name) {
echo "Tentative de chargement de $name.\n";
throw new MissingException("Impossible de charger $name.");
});
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
L'exemple ci-dessus va afficher :
Tentative de chargement de NonLoadableClass. Tentative de chargement de MissingException. Fatal error: Class 'MissingException' not found in testMissingException.php on line 4