Что такое __autoload() в PHP?

«Что такое __autoload() в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

__autoload() — это устаревшая магическая функция в PHP, которая автоматически загружает файл с определением класса при первой попытке его использования, если этот класс ещё не был объявлен.

Пример использования:

function __autoload($className) {
    require_once __DIR__ . '/classes/' . $className . '.php';
}

// При создании объекта, если класс MyClass не определён,
// будет вызвана __autoload('MyClass')
$obj = new MyClass();

Ключевые недостатки и современная альтернатива:

  • Устаревание: Функция объявлена устаревшей в PHP 7.2 и полностью удалена в PHP 8.0.
  • Однообразие: В скрипте можно определить только одну функцию __autoload(), что ограничивает гибкость.
  • Стандарт: Сейчас следует использовать spl_autoload_register(), который позволяет зарегистрировать несколько автозагрузчиков и создавать более сложные схемы автозагрузки, соответствующие PSR-4.

Современный вариант с spl_autoload_register:

spl_autoload_register(function ($className) {
    $file = __DIR__ . '/src/' . str_replace('\', '/', $className) . '.php';
    if (file_exists($file)) {
        require_once $file;
    }
});