spl_autoload_register()
vous permet d'enregistrer plusieurs fonctions (ou méthodes statiques de votre propre classe Autoload) que PHP mettra dans une pile / file d'attente et appellera séquentiellement lorsqu'une "nouvelle classe" sera 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 transmet ce nom sous forme de chaîne à spl_autoload_register()
, ce qui vous permet de récupérer la variable et de l'utiliser pour "inclure" la classe / le fichier approprié . Par conséquent, vous n'avez pas besoin spécifiquement d'inclure cette classe via une instruction include / require ...
Appelez simplement la classe que vous souhaitez instancier comme dans l'exemple ci-dessus, et puisque vous avez enregistré une fonction (via spl_autoload_register()
) de votre choix qui déterminera où se trouve toute votre classe, PHP utilisera cette fonction.
L'avantage de l'utilisation spl_autoload_register()
est que, contrairement à __autoload()
vous, vous n'avez pas besoin d'implémenter une fonction de chargement automatique dans chaque fichier que vous créez. spl_autoload_register()
vous permet également d'enregistrer plusieurs fonctions de chargement automatique 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 implémentation par défaut pour __autoload()
. Si rien d'autre n'est spécifié et spl_autoload_register()
est appelé sans aucun paramètre, ces fonctions seront utilisées pour tout appel ultérieur à __autoload()
.
En termes plus pratiques, si tous vos fichiers se trouvent dans un seul répertoire et que votre application utilise non seulement des fichiers .php, mais des fichiers de configuration personnalisés avec des extensions .inc par exemple, alors une stratégie que vous pourriez utiliser serait d'ajouter votre répertoire contenant tous les fichiers vers le chemin d'inclusion de PHP (via set_include_path()
).
Et puisque vous avez également besoin de vos fichiers de configuration, vous utiliseriez spl_autoload_extensions()
pour répertorier les extensions que vous souhaitez que PHP recherche.
Exemple:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Puisque spl_autoload est l'implémentation par défaut de la __autoload()
méthode magique, PHP appellera spl_autoload lorsque vous essayez d'instancier une nouvelle classe.
J'espère que cela t'aides...