spl_autoload_register()
дозволяє реєструвати кілька функцій (або статичних методів з вашого власного класу автозавантаження), які PHP буде ставити в стек / чергу і викликати послідовно, коли оголошується "новий клас".
Так, наприклад:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
У наведеному вище прикладі "MyClass" - це назва класу, до якого ви намагаєтеся інстанціювати, PHP передає це ім'я як рядок spl_autoload_register()
, що дозволяє підібрати змінну та використовувати її для "включення" відповідного класу / файлу . Як результат, вам не потрібно спеціально включати цей клас через оператор включення / вимагати ...
Просто зателефонуйте до класу, який ви хочете створити, наприклад, у наведеному вище прикладі, і оскільки ви зареєстрували власну функцію (через spl_autoload_register()
), яка визначить, де знаходиться ваш клас, PHP використовуватиме цю функцію.
Перевага використання spl_autoload_register()
полягає в тому, що на відміну від __autoload()
вас не потрібно реалізовувати функцію автозавантаження у кожному створеному файлі. spl_autoload_register()
також дозволяє зареєструвати кілька функцій автоматичного завантаження, щоб прискорити автоматичне завантаження та зробити це ще простіше.
Приклад:
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
}
Що стосується spl_autoload , в посібнику зазначено:
Ця функція призначена для використання як реалізація за замовчуванням для __autoload()
. Якщо нічого іншого не вказано і spl_autoload_register()
не викликається без будь-яких параметрів, ці функції будуть використовуватися для будь-якого подальшого виклику __autoload()
.
Більш практично, якщо всі ваші файли розміщені в одному каталозі, а ваша програма використовує не тільки файли .php, але й спеціальні файли конфігурації, наприклад, з розширеннями .inc, то однією стратегією ви могли б скористатись, щоб додати каталог, що містить усі Файли до PHP включають шлях (через set_include_path()
).
А оскільки вам також потрібні ваші конфігураційні файли, ви б spl_autoload_extensions()
перерахували розширення, які ви хочете шукати PHP
Приклад:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Оскільки spl_autoload є реалізацією за замовчуванням __autoload()
магічного методу, PHP зателефонує spl_autoload при спробі і інстанціювати новий клас.
Сподіваюся, це допомагає ...