spl_autoload_register

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

spl_autoload_register Регистрирует заданную функцию в качестве реализации метода __autoload()

Описание

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

Регистрирует функцию __autoload в предоставляемой SPL очереди. В результате очередь будет активирована, даже если ранее она была выключена.

Если в вашем скрипте реализована функция __autoload(), её необходимо явно зарегистрировать в очереди __autoload. Это необходимо, т.к. spl_autoload_register() полностью заменяет механизм кеширования __autoload() функциями spl_autoload() и spl_autoload_call().

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 spl_autoload_register() как альтернатива функции __autoload()

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