spl_autoload_register

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

spl_autoload_registerEnregistre une fonction en tant qu'implémentation de __autoload()

Description

spl_autoload_register(?callable $callback = null, bool $throw = true, bool $prepend = false): bool

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

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

Version Description
8.0.0 callback est désormais nullable.

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