Разработчики объектно-ориентированных приложений договорились создавать по одному исходному PHP-файлу для каждого класса. Главная неприятность — приходится в начале каждого скрипта писать длинный список включений, по одному для каждого файла, который требуется загрузить.
Функция spl_autoload_register() регистрирует нужное количество автозагрузчиков для автоматической загрузки классов и интерфейсов, которые пока не определили. Регистрация автозагрузчиков даёт PHP последний шанс загрузить класс или интерфейс, прежде чем скрипт завершит работу с ошибкой.
Все классоподобные конструкции получится загрузить автоматически таким же способом, включая классы, интерфейсы, трейты и перечисления.
До PHP 8.0.0 классы и интерфейсы загружали автоматически функцией __autoload(). Однако это менее гибкая альтернатива функции spl_autoload_register(), а функцию __autoload() объявили устаревшей в PHP 7.2.0 и удалили в PHP 8.0.0.
Замечание:
Функцию spl_autoload_register() разрешается вызывать больше одного раза, чтобы зарегистрировать больше одного автозагрузчика. Если функция автозагрузки выбросит исключение, оно прервёт процесс автозагрузки и не разрешит запускать следующие функции автозагрузки. Поэтому выбрасывать исключения из функции автозагрузки настоятельно не рекомендуется.
Пример #1 Пример автоматической загрузки
В этом примере функция пытается загрузить класс MyClass1
из файла MyClass1.php и класс MyClass2
из файла MyClass2.php.
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Пример #2 Ещё один пример автоматической загрузки
В этом примере функция пытается загрузить интерфейс ITest
.
<?php
spl_autoload_register(function ($name) {
var_dump($name);
});
class Foo implements ITest {}
?>