(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Регистрирует функцию как реализацию функции __autoload()
Функция регистрирует пользовательскую функцию в очереди __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
.
throw
Этот параметр определяет, будет ли функция
spl_autoload_register() выбрасывать исключение,
когда не удаётся зарегистрировать функцию callback
.
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"