spl_autoload_register - Регистрирует заданную функцию в качестве реализации метода __autoload()
Вернуться к: SPL Функции
spl_autoload_register
(PHP 5 >= 5.1.2, PHP 7)
spl_autoload_register — Регистрирует заданную функцию в качестве реализации метода __autoload()
Описание
$autoload_function
[, bool $throw
= true
[, bool $prepend
= false
]]] )Регистрирует функцию в spl очереди метода __autoload. В результате очередь будет активирована, даже если ранее она был выключена.
Если в вашем скрипте реализована функция __autoload(), ее необходимо явно зарегистрировать в очереди __autoload. Это необходимо, так как spl_autoload_register() полностью заменяет механизм кэширования __autoload() функциями spl_autoload() и spl_autoload_call().
spl_autoload_register() позволяет задать несколько реализаций метода автозагрузки описаний классов и интерфейсов. Она создает очередь из функций автозагрузки в порядке их определения в скрипте, тогда как встроенная функция __autoload() может иметь только одну реализацию.
Список параметров
-
autoload_function
-
Имя функции, реализующей метод spl_autoload(). Если аргумент не задан, будет зарегистрирована реализация по умолчанию.
-
throw
-
Этот параметр определяет, должна ли spl_autoload_register() выбрасывать исключение, если зарегистрировать
autoload_function
оказалось невозможным. -
prepend
-
Если передано значение true, spl_autoload_register() поместит указанную функцию в начало очереди вместо добавления в конец.
Возвращаемые значения
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.3.0 | Добавлена поддержка пространств имен. |
5.3.0 |
Добавлен аргумент prepend .
|
Примеры
Пример #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');
// начиная с версии PHP 5.3.0 можно использовать безымянные функции
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
?>
Пример #2 Пример использования spl_autoload_register(), где описание класса не загрузится
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print '[['. $name .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test'); // версии PHP выше 5.3.0
new InexistentClass;
?>
Результатом выполнения данного примера будет что-то подобное:
[[Foobar\InexistentClass]] Fatal error: Class 'Foobar\InexistentClass' not found in ...
Вернуться к: SPL Функции