(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Enregistre une fonction en tant qu'implémentation de __autoload()
Description
spl_autoload_register(?callable
$callback
=
null
, bool
$throw
=
true
, bool
$prepend
=
false
): bool
Si votre code dispose déjà d'une fonction __autoload(),
alors cette fonction doit explicitement enregistrer la pile __autoload.
Ceci est du au fait que spl_autoload_register()
remplace le cache du moteur pour la fonction
__autoload() par soit spl_autoload(),
soit spl_autoload_call().
Si vous devez utiliser plusieurs fonctions d'autochargement,
la fonction spl_autoload_register() est faite pour cela.
Elle crée une file d'attente de fonctions d'autochargement, et les exécute
les unes après les autres, dans l'ordre où elles ont été définies.
A contrario, la fonction __autoload() ne peut être définie
qu'une seule fois.
Liste de paramètres
-
callback
-
La fonction d'autoload à enregistrer.
Si null
, alors, l'implémentation par
défaut de la fonction spl_autoload() sera enregistrée.
callback(string $class
): void
La class
ne contiendra pas le backslash initial
d'un identifiant entièrement qualifié.
-
throw
-
Ce paramètre spécifie si
spl_autoload_register() doit lancer
des exceptions lorsque le callback
n'a pu être enregistré.
Avertissement
Ce paramètre est ignoré à partir de PHP 8.0.0, et une notice sera
émise s'il est défini à false
. spl_autoload_register()
lancera toujours une TypeError avec des arguments
non valides.
-
prepend
-
Si ce paramètre vaut true
, spl_autoload_register()
ajoutera la fonction au début de la pile de l'autoloader
au lieu de l'ajouter à la fin de la pile.
Valeurs de retour
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
Historique
Exemples
Exemple #1 Exemple avec spl_autoload_register() comme remplacement d'une fonction __autoload()
<?php
// function __autoload($class) {
// include 'classes/' . $class . '.class.php';
// }
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
// Ou, en utilisant une fonction anonyme
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
?>
Exemple #2 Exemple avec spl_autoload_register() où la classe n'est pas chargée
<?php
namespace Foobar;
class Foo {
static public function test($class) {
print '[['. $class .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test');
new InexistentClass;
?>
Résultat de l'exemple ci-dessus est similaire à :
[[Foobar\InexistentClass]]
Fatal error: Class 'Foobar\InexistentClass' not found in ...
Exemple #3 L'identifiant sera fourni sans le backslash initial.
<?php
spl_autoload_register(static function ($class) {
var_dump($class);
});
class_exists('RelativeName');
class_exists('RelativeName\\WithNamespace');
class_exists('\\AbsoluteName');
class_exists('\\AbsoluteName\\WithNamespace');
?>
L'exemple ci-dessus va afficher :
string(12) "RelativeName"
string(26) "RelativeName\WithNamespace"
string(12) "AbsoluteName"
string(26) "AbsoluteName\WithNamespace"
Voir aussi
- __autoload() - Tente de charger une classe indéfinie