Многие разработчики, пишущие объектно-ориентированные приложения, создают один исходный файл 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 ...
*/
?>