Автоматическая загрузка классов в PHP с использованием spl_autoload.
Всем привет. В этой статье я расскажу про автоматическое подключение файлов в php с помощью spl_autoload.
На сайте уже была статья про магический метод __autoload, который делал то же самое, однако из-за своих недостатков он достаточно быстро устарел. А на смену ему пришла функция spl_autoload. Вот давайте о ней и поговорим.
Внутрь функции spl_autoload_register вы можете передать анонимную, или лямбда функцию, которая будет что-то делать, например, подключать файлы.
<?php
spl_autoload_register(function($name) {
require 'classes/'.$name.'.php';
});
?>
Также, вы можете вынести эту функцию отдельно, а в spl_autoload_register передать строковое значение с названием вашей функции.
<?php
function autoLoader($name) {
require 'classes/'.$name.'.php';
}
spl_autoload_register('autoLoader');
?>
С помощью spl_autoload_extensions вы можете указать значения расширений по-умолчанию для функции spl_autoload.
spl_autoload_extensions('.php');
spl_autoload_register();
Теперь будут искаться файлы с расширением .php. Если вы захотите указать больше расширений, то укажите их все через запятую.
spl_autoload_extensions('.php, .php4, .php3, .class.php');
С помощью spl_autoload_register вы можете зарегистрировать сразу несколько функций, все они будут помещены в стек. Какая была раньше зарегистрирована, та и будет первее.
spl_autoload_register('autoLoader1');
spl_autoload_register('autoLoader2');
Если вы хотите посмотреть все зарегистрированные функции, то вы можете воспользоваться функцией spl_autoload_functions, которая возвращает массив.
print_r(spl_autoload_functions());
Если вы захотите удалить какую-нибудь из функций в стеке автозагрузки, то достаточно воспользоваться spl_autoload_unregister, передав название нужной функции.
spl_autoload_unregister('autoLoader1');
Вот и все, что нужно знать об этой возможности. Используйте именно этот автозагрузчик, а не магический метод __autoload(), потому что spl_autoload более гибок и новее. Спасибо за внимание и удачного кодинга!
-
- Михаил Русаков
Комментарии (2):
Спасибо!
Ответить
Статья интересная, но хотелось чтобы был описан более подробно механизм определения функцией autoload() подключения нужных классов и где данный скрипт должен быть .
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.