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


(PHP 5 >= 5.1.2)

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

Описание

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

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