spl_autoload_register()
consente di registrare più funzioni (o metodi statici della propria classe di caricamento automatico) che PHP inserirà in uno stack / coda e chiamerà in sequenza quando viene dichiarata una "nuova classe".
Quindi per esempio:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
Nell'esempio sopra, "MyClass" è il nome della classe che si sta tentando di creare un'istanza, PHP passa questo nome come stringa a spl_autoload_register()
, che consente di raccogliere la variabile e utilizzarla per "includere" la classe / il file appropriati . Di conseguenza non è necessario includere specificamente quella classe tramite un'istruzione include / request ...
Basta semplicemente chiamare la classe che si desidera creare un'istanza come nell'esempio sopra, e poiché hai registrato una tua funzione (via spl_autoload_register()
) che capirà dove si trova tutta la tua classe, PHP utilizzerà quella funzione.
Il vantaggio dell'utilizzo spl_autoload_register()
è che a differenza di __autoload()
te non è necessario implementare una funzione di caricamento automatico in ogni file che crei. spl_autoload_register()
consente inoltre di registrare più funzioni di caricamento automatico per accelerare il caricamento automatico e renderlo ancora più semplice.
Esempio:
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
}
Per quanto riguarda spl_autoload , il manuale afferma:
Questa funzione deve essere utilizzata come implementazione predefinita per __autoload()
. Se non viene specificato nient'altro e spl_autoload_register()
viene chiamato senza parametri, questa funzione verrà utilizzata per qualsiasi chiamata successiva a __autoload()
.
In termini più pratici, se tutti i file si trovano in una singola directory e l'applicazione utilizza non solo file .php, ma file di configurazione personalizzati con estensioni .inc, ad esempio, una strategia che potresti utilizzare sarebbe quella di aggiungere la tua directory contenente tutti i file nel percorso di inclusione di PHP (via set_include_path()
).
E poiché hai bisogno anche dei tuoi file di configurazione, dovresti spl_autoload_extensions()
elencare le estensioni che vuoi che PHP cerchi.
Esempio:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Poiché spl_autoload è l'implementazione predefinita del __autoload()
metodo magico, PHP chiamerà spl_autoload quando proverai ad istanziare una nuova classe.
Spero che questo ti aiuti...