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