spl_autoload_register()
vous permet d'enregistrer plusieurs fonctions (ou méthodes statiques à partir de votre propre auto-chargement de la classe) que PHP va mettre dans une pile/de la file d'attente et appel séquentiellement lors d'une "nouvelle Classe" est déclarée.
Ainsi, par exemple:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
Dans l'exemple ci-dessus, "MyClass" est le nom de la classe que vous essayez d'instancier, PHP passe de ce nom comme une chaîne d' spl_autoload_register()
, ce qui permet de ramasser de la variable et de l'utiliser pour "comprendre" la classe/fichier. Comme un résultat, vous n'avez pas spécialement besoin d'inclure la classe via un include ou require déclaration...
Tout simplement appeler le nom de la classe à instancier comme dans l'exemple ci-dessus, et puisque vous vous êtes inscrit à une fonction (par spl_autoload_register()
) de votre propre qui va déterminer où tous votre classe est situé, PHP utilisera cette fonction.
L'avantage de l'utilisation de spl_autoload_register()
, c'est que contrairement à, __autoload()
, vous n'avez pas besoin de mettre en œuvre une fonction autoload dans chaque fichier que vous créez. spl_autoload_register()
vous permet également de s'inscrire à plusieurs autoload pour accélérer le chargement automatique et le rendre encore plus facile.
Exemple:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
En ce qui concerne spl_autoload, le manuel indique:
Cette fonction est destinée à être utilisée comme valeur par défaut de mise en œuvre pour l' __autoload()
. Si rien d'autre n'est spécifié et spl_autoload_register()
est appelée sans paramètres, puis cette fonction sera utilisée pour tout appel ultérieur à l' __autoload()
.
Plus concrètement, si tous vos fichiers sont situés dans un répertoire unique et que votre application utilise pas seulement .php les fichiers, mais les fichiers de configuration personnalisés .inc extensions par exemple, une stratégie que vous pourriez utiliser à ajouter à votre répertoire contenant tous les fichiers d'include de PHP chemin (via set_include_path()
) et puisque vous avez besoin de vos fichiers de configuration, vous devez utiliser spl_autoload_extensions()
à la liste des extensions que vous souhaitez PHP chercher.
Exemple:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Depuis spl_autoload est l'implémentation par défaut de l' __autoload()
méthode magique, PHP va appeler spl_autoload lorsque vous essayez et instancier une nouvelle classe.
Espérons que cela aide...