spl_autoload_register
(PHP 5 >= 5.1.0, PHP 7)
spl_autoload_register — Регистрирует заданную функцию в качестве реализации метода __autoload()
Описание
$autoload_function
= ?
, bool $throw
= true
, bool $prepend
= false
) : boolРегистрирует функцию __autoload в предоставляемой SPL очереди. В результате очередь будет активирована, даже если ранее она была выключена.
Если в вашем скрипте реализована функция __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
в случае возникновения ошибки.
Примеры
Пример #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 ...