spl_autoload_register

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

spl_autoload_registerРеєструє задану функцію, як таку, що впроваджує механізм автозавантаження

Опис

spl_autoload_register(callable $autoload_function = ?, bool $throw = true, bool $prepend = false): bool

Реєструє функцію автозавантаження в черзі функцій spl, та активує цю чергу, якщо її не було активовано раніше.

Якщо ваш код містить функцію, що впроваджує механізм __autoload(), то її потрібно явно реєструвати в черзі __autoload. Така необхідність є, оскільки spl_autoload_register() буде фактично замінювати механізм кешування для функції __autoload() або через функцію spl_autoload(), або через spl_autoload_call().

spl_autoload_register() дозволяє реєструвати зразу декілька функцій для автозавантаження. Вона фактично створює чергу з цих функцій та запускає кожну з них в порядку їх визначення. Це відрізняє її від функції __autoload(), яку можна визначати лише один раз.

Параметри

autoload_function

Функція, яку буде зареєстровано для автозавантаження. Якщо цей параметр не передавати, то буде зареєстровано типову (by default) реалізацію механізма автозавантаження через spl_autoload().

throw

Цей параметр визначає чи повинна spl_autoload_register() кидати винятки, коли autoload_function не може бути зареєстрованою.

prepend

Якщо цей параметр дорівнює TRUE, то функція spl_autoload_register() поставить autoload_function на початок черги, а не позаду.

Значення, що повертаються

Повертає 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 ...

Прогляньте також

  • __autoload() - Намагається завантажити невизначений клас