Регистрирует функцию автозагрузки классов

# spl_autoload_register

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

spl_autoload_register — Регистрирует функцию автозагрузки классов

### Описание

function spl_autoload_register(?callable `$callback` = `null`, bool `$throw` = `true`, bool `$prepend` = `false`): bool

Функция регистрирует в очереди __autoload, которую предоставляет библиотека SPL (англ. сокр.: Standard PHP Library — стандартная библиотека ядра PHP), стандартную или пользовательскую функцию автозагрузки классов. Функция активирует очередь функций-автозагрузчиков, если очередь ещё не активировали.

До PHP 8.0.0 функция __autoload() автоматически запускалась при попытке создать экземпляр класса, который ещё не загрузили, если функцию определяли в коде. Вызов функции spl_autoload_register() заменял в кеше движка автовызов функции __autoload() либо вызовом функции spl_autoload(), либо вызовом функции spl_autoload_call(), в зависимости от версии PHP. Поэтому функцию __autoload() требовалось явно регистрировать в очереди функций-автозагрузчиков, иначе после регистрации стандартного или пользовательского автозагрузчика функция не вызывалась.

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

### Список параметров

`callback`

  Строка с названием функции или анонимная функция, которую функция зарегистрирует как автозагрузчик классов. Функция зарегистрирует как автозагрузчик классов функцию spl_autoload(), если значение параметра равно `null`.

  function callback(string `$class`): void
`throw`

  Параметр определяет, выбросит ли функция spl_autoload_register() исключение, когда не получается зарегистрировать `callback`-функцию.

  Внимание

  Начиная с PHP 8.0.0 функция игнорирует параметр. Функция выдаст уведомление, если для параметра установили значение `false`. При передаче аргументов недопустимого типа функция spl_autoload_register() теперь выбрасывает ошибку TypeError.

`prepend`

  При передаче значения `true` функция spl_autoload_register() добавит автозагрузчик в начало, а не в конец очереди автозагрузки.

### Возвращаемые значения

Функция возвращает `true`, если выполнилась успешно, или `false`, если возникла ошибка.

### Список изменений

Версия | Описание
--- | ---
8.0.0 | Теперь параметр `callback` принимает значение null.

### Примеры

Пример #1 Замена функции __autoload() функцией spl_autoload_register()

    <?php

    // function __autoload($class)
    // {
    //     include 'classes/' . $class . '.class.php';
    // }

    function my_autoloader($class)
    {
        include 'classes/' . $class . '.class.php';
    }

    // Функция принимает для регистрации автозагрузчиков названия функций...
    spl_autoload_register('my_autoloader');

    // ...и анонимные функции
    spl_autoload_register(function ($class) {
        include 'classes/' . $class . '.class.php';
    });

    ?>

Пример #2 Пример регистрации функцией spl_autoload_register() автозагрузчика, который не загрузил класс

    <?php

    namespace Foobar;

    class Foo
    {
        static public function test($class)
        {
            print '[['. $class .']]';
        }
    }

    spl_autoload_register(__NAMESPACE__ . '\Foo::test');

    new InexistentClass();

    ?>

Вывод приведённого примера будет похож на:

    [[Foobar\InexistentClass]]
    Fatal error: Class 'Foobar\InexistentClass' not found in ...

Пример #3 Идентификаторы передаются в функцию без ведущего обратного слеша

    <?php

    spl_autoload_register(static function ($class) {
        var_dump($class);
    });

    class_exists('RelativeName');
    class_exists('RelativeName\\WithNamespace');
    class_exists('\\AbsoluteName');
    class_exists('\\AbsoluteName\\WithNamespace');

    ?>

Результат выполнения приведённого примера:

    string(12) "RelativeName"
    string(26) "RelativeName\WithNamespace"
    string(12) "AbsoluteName"
    string(26) "AbsoluteName\WithNamespace"

### Смотрите также

- __autoload() - Пытается загрузить неопределённый класс

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open