spl_autoload_register

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

spl_autoload_registerRegistra una función como implementación de __autoload()

Descripción

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

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.

Parámetros

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().

callback(string $class): void

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.

Advertencia

Este parámetro es ignorado a partir de PHP 8.0.0, y se emitirá un aviso si se define como false. spl_autoload_register() siempre lanzará una TypeError con argumentos no válidos.

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.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Historial de cambios

Versión Descripción
8.0.0 callback ahora es nullable.

Ejemplos

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"

Ver también