(PHP 5 >= 5.1.2)
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 ...