spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register — Enregistre une fonction comme __autoload()
Description
$autoload_function
[, bool $throw
= true
[, bool $prepend
= false
]]] )spl_autoload_register() enregistre une fonction dans la pile __autoload() fournie. Si la pile n'est pas encore active, elle est activée.
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
-
autoload_function
-
La fonction __autoload() à enregistrer. Si aucun paramètre n'est fourni, alors, l'implémentation par défaut de la fonction spl_autoload() sera enregistrée.
-
throw
-
Ce paramètre spécifie si spl_autoload_register() doit lancer des exceptions lorsque le paramètre
autoload_function
n'a pu être enregistré. -
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
Version | Description |
---|---|
5.3.0 | Ajout du support des espaces de noms. |
5.3.0 |
Le paramètre prepend a été ajouté.
|
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 à partir de PHP 5.3.0 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($name) {
print '[['. $name .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test'); // Depuis PHP 5.3.0
new InexistentClass;
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
[[Foobar\InexistentClass]] Fatal error: Class 'Foobar\InexistentClass' not found in ...