(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Registra una función como implementación de __autoload()
spl_autoload_register() registra una función en la pila __autoload() proporcionada. Si la pila no está activa, se activa.
Si el código ya dispone de una función __autoload(), entonces esta función debe registrar explícitamente la pila __autoload. Esto se debe a que spl_autoload_register() reemplaza la caché del motor para la función __autoload() por spl_autoload() o spl_autoload_call().
Si se deben utilizar múltiples funciones de autocarga, la función spl_autoload_register() está diseñada para ello. Crea una cola de funciones de autocarga y las ejecuta una tras otra, en el orden en que fueron definidas. A diferencia, la función __autoload() solo puede definirse una vez.
callback
La función de autoload a registrar.
Si es null
, entonces se registrará la implementación
por defecto de la función spl_autoload().
El class
no contendrá el backslash inicial
de un identificador completamente cualificado.
throw
Este parámetro especifica si
spl_autoload_register() debe lanzar
excepciones cuando el callback
no ha podido ser registrado.
prepend
Si este parámetro vale true
, spl_autoload_register()
añadirá la función al principio de la pila del autoloader
en lugar de añadirla al final de la pila.
Versión | Descripción |
---|---|
8.0.0 |
callback ahora es nullable.
|
Ejemplo #1 Ejemplo con spl_autoload_register() como reemplazo de una función __autoload()
<?php
// function __autoload($class) {
// include 'classes/' . $class . '.class.php';
// }
function my_autoloader($class) {
include 'classes/' . $class . '.class.php';
}
spl_autoload_register('my_autoloader');
// O, utilizando una función anónima
spl_autoload_register(function ($class) {
include 'classes/' . $class . '.class.php';
});
?>
Ejemplo #2 Ejemplo con spl_autoload_register() donde la clase no es cargada
<?php
namespace Foobar;
class Foo {
static public function test($class) {
print '[['. $class .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test');
new InexistentClass;
?>
El resultado del ejemplo sería algo similar a:
[[Foobar\InexistentClass]] Fatal error: Class 'Foobar\InexistentClass' not found in ...
Ejemplo #3 El identificador será proporcionado sin el backslash inicial.
<?php
spl_autoload_register(static function ($class) {
var_dump($class);
});
class_exists('RelativeName');
class_exists('RelativeName\\WithNamespace');
class_exists('\\AbsoluteName');
class_exists('\\AbsoluteName\\WithNamespace');
?>
El resultado del ejemplo sería:
string(12) "RelativeName" string(26) "RelativeName\WithNamespace" string(12) "AbsoluteName" string(26) "AbsoluteName\WithNamespace"