Автоматическая загрузка классов

Разработчики объектно-ориентированных приложений договорились создавать по одному исходному 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 {}


?>
To Top