(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Регистрирует заданную функцию в качестве реализации метода __autoload()
Регистрирует функцию __autoload в предоставляемой SPL очереди. В результате очередь будет активирована, даже если ранее она была выключена.
Если в вашем скрипте реализована функция __autoload(), её необходимо явно зарегистрировать в очереди __autoload. Это необходимо, т.к. spl_autoload_register() полностью заменяет механизм кеширования __autoload() функциями spl_autoload() и spl_autoload_call().
spl_autoload_register() позволяет задать несколько реализаций метода автозагрузки. Она создаёт очередь из функций автозагрузки в порядке их определения в скрипте, тогда как встроенная функция __autoload() может иметь только одну реализацию.
callback
Имя функции, реализующей метод spl_autoload(). Если null
, будет зарегистрирована реализация по умолчанию.
$class
): voidthrow
Этот параметр определяет, должна ли
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"