Многие разработчики, пишущие объектно-ориентированные приложения, создают один исходный файл 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
и MyClass2
из файлов MyClass1.php и 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 {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
0 комментариев