spl_autoload_register()
pozwala zarejestrować wiele funkcji (lub metod statycznych z własnej klasy Autoload), które PHP umieści w stosie / kolejce i wywoła sekwencyjnie, gdy zadeklarowana zostanie „nowa klasa”.
Na przykład:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
W powyższym przykładzie „MyClass” to nazwa klasy, którą próbujesz utworzyć, PHP przekazuje tę nazwę jako ciąg znaków spl_autoload_register()
, co pozwala ci pobrać zmienną i użyć jej do „włączenia” odpowiedniej klasy / pliku . W rezultacie nie musisz specjalnie uwzględniać tej klasy za pomocą instrukcji włączania / żądania ...
Wystarczy wywołać klasę, którą chcesz utworzyć, jak w powyższym przykładzie, a ponieważ zarejestrowałeś własną funkcję (via spl_autoload_register()
), która zorientuje się, gdzie znajdują się wszystkie klasy, PHP użyje tej funkcji.
Zaletą korzystania spl_autoload_register()
jest to, że w przeciwieństwie do __autoload()
tego, nie trzeba implementować funkcji automatycznego ładowania w każdym tworzonym pliku. spl_autoload_register()
pozwala także zarejestrować wiele funkcji automatycznego ładowania, aby przyspieszyć automatyczne ładowanie i jeszcze bardziej ułatwić.
Przykład:
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
}
W odniesieniu do spl_autoload instrukcja mówi:
Ta funkcja ma być używana jako domyślna implementacja dla __autoload()
. Jeśli nic innego nie zostanie określone i nie spl_autoload_register()
zostanie wywołane bez żadnych parametrów, funkcje te zostaną wykorzystane do późniejszego wywołania __autoload()
.
Mówiąc prościej, jeśli wszystkie pliki znajdują się w jednym katalogu, a aplikacja używa nie tylko plików .php, ale także niestandardowych plików konfiguracyjnych z rozszerzeniami .inc, na przykład, jedną ze strategii, którą można zastosować, byłoby dodanie katalogu zawierającego wszystkie pliki do PHP zawierają ścieżkę (via set_include_path()
).
A ponieważ potrzebujesz również plików konfiguracyjnych, użyjesz spl_autoload_extensions()
listy rozszerzeń, których ma szukać PHP.
Przykład:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Ponieważ spl_autoload jest domyślną implementacją __autoload()
magicznej metody, PHP wywoła spl_autoload podczas próby utworzenia nowej klasy.
Mam nadzieję że to pomoże...