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-библиотеки ядра PHP. Библиотека SPL активирует очередь, если очередь не активировали раньше.

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

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

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

callback

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

callback(string $class): void
throw

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

Внимание

С PHP 8.0.0 функция игнорирует параметр, и выдаёт уведомление, если значение параметра равно false. Теперь функция spl_autoload_register() будет выбрасывать исключение TypeError при каждой передаче некорректных аргументов.

prepend

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

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

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