spl_autoload_register

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

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

Описание

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.

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() - Пытается загрузить неопределённый класс