(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Реєструє задану функцію, як таку, що впроваджує механізм автозавантаження
$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
на початок черги, а не
позаду.
Версія | Опис |
---|---|
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 ...