Auto-chargement de classes
- Introduction
- Syntaxe de base
- Propriétés
- Constantes de classe
- Auto-chargement de classes
- Constructeurs et destructeurs
- Visibilité
- Héritage
- L'opérateur de résolution de portée (::)
- Statique
- Abstraction de classes
- Interfaces
- Traits
- Classes anonymes
- Surcharge magique
- Parcours d'objets
- Méthodes magiques
- Mot-clé "final"
- Clonage d'objets
- Comparaison d'objets
- Late Static Bindings (Résolution statique à la volée)
- Objets et références
- Sérialisation d'objets
- Covariance et Contravariance
- Modifications en POO (Programmation orientée objet)
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.
Toute construction similaire à des classes peuvent être autochargées de la même manière. Ceci inclut les classes, interfaces, trait, et énumérations.
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.
spl_autoload_register() peut être appelée plusieurs fois pour enregistrer plusieurs autochargeur. Lancer une exception depuis une fonction d'autochargement, interrompra ce processus et ne permet pas aux fonctions d'autochargement suivantes à être exécutées. Pour cette raison, lancer des exceptions depuis une fonction d'autochargement est fortement découragée.
Exemple #1 Exemple d'autochargement
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'autochargement
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 ...
*/
?>