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()
, что позволяет вам выбрать переменную и использовать ее для «включения» соответствующего класса / файла. , В результате вам не нужно специально включать этот класс с помощью оператора include / require ...
Просто вызовите класс, для которого вы хотите создать экземпляр, как в примере выше, и, поскольку вы зарегистрировали собственную функцию (via 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, когда вы попытаетесь создать новый класс.
Надеюсь это поможет...