spl_autoload_register

(PHP 5 >= 5.1.0, PHP 7)

spl_autoload_register Регистрирует заданную функцию в качестве реализации метода __autoload()

Описание

spl_autoload_register ( callable $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 ...

Смотрите также

  • __autoload() - Попытка загрузить неопределенный класс