array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ru', ), 'this' => array ( 0 => 'function.spl-autoload-register.php', 1 => 'spl_autoload_register', ), 'up' => array ( 0 => 'ref.spl.php', 1 => 'Функции SPL', ), 'prev' => array ( 0 => 'function.spl-autoload-functions.php', 1 => 'spl_autoload_functions', ), 'next' => array ( 0 => 'function.spl-autoload-unregister.php', 1 => 'spl_autoload_unregister', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ru', 'path' => 'reference/spl/functions/spl-autoload-register.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Регистрирует функцию как реализацию функции __autoload()
Функция регистрирует пользовательскую функцию в очереди __autoload SPL-библиотеки ядра PHP. Библиотека SPL активирует очередь, если очередь не активировали раньше.
Функцию __autoload() требуется зарегистрировать в очереди __autoload явным образом, если эту функцию объявили в коде. Причина требования состоит в том, что при вызове функции spl_autoload_register() PHP заменит в кеше движка функцию __autoload() либо функцией spl_autoload(), либо функцией spl_autoload_call().
Функция spl_autoload_register() разрешает задавать больше одной функции автозагрузки. Она создаёт очередь функций автозагрузки и выполняет каждую из заданных функций в том порядке, в котором функции автозагрузки определили. Тогда как встроенную функцию __autoload() разрешается определять только один раз.
callback
Функция или название функции автозагрузки для регистрации.
PHP зарегистрирует базовую реализацию функции spl_autoload(),
если значение параметра равно null
.
throw
Этот параметр определяет, будет ли функция
spl_autoload_register() выбрасывать исключение,
когда не удаётся зарегистрировать функцию callback
.
prepend
Функция spl_autoload_register()
добавит автозагрузчик в начало, а не в конец очереди автозагрузки,
если передали значение true
.
Возвращает true
в случае успешного выполнения или false
, если возникла ошибка.
Версия | Описание |
---|---|
8.0.0 |
Теперь параметр callback принимает значение null.
|
Пример #1 Замена функции __autoload() функцией spl_autoload_register()
<?php
// function __autoload($class) {
// include 'classes/' . $class . '.class.php';
// }
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
// Разрешается передавать анонимные функции
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
?>
Пример #2 Пример поведения функции spl_autoload_register() в коде, в котором не загрузили класс
<?php
namespace Foobar;
class Foo
{
static public function test($class)
{
print '[['. $class .']]';
}
}
spl_autoload_register(__NAMESPACE__ . '\Foo::test');
new InexistentClass();
?>
Вывод приведённого примера будет похож на:
[[Foobar\InexistentClass]] Fatal error: Class 'Foobar\InexistentClass' not found in ...
Пример #3 Идентификаторы передаются в функцию без ведущего обратного слеша
<?php
spl_autoload_register(static function ($class) {
var_dump($class);
});
class_exists('RelativeName');
class_exists('RelativeName\\WithNamespace');
class_exists('\\AbsoluteName');
class_exists('\\AbsoluteName\\WithNamespace');
?>
Результат выполнения приведённого примера:
string(12) "RelativeName" string(26) "RelativeName\WithNamespace" string(12) "AbsoluteName" string(26) "AbsoluteName\WithNamespace"