(PHP 5 >= 5.1.0, PHP 7, PHP 8)
spl_autoload_register — Registrar las funciones dadas como implementación de __autoload()
$autoload_function
= ?, bool$throw
= true
, bool$prepend
= false
): boolRegistra una función con la cola de __autoload proporcionada por spl. Si la cola aún no ha sido activa, será activada.
Si el código contiene una función __autoload() existente, dicha función debe estar explícitamente registrada en la cola de __autoload. Esto es debido a que spl_autoload_register() de hecho reemplazará la caché del motor para la función __autoload() mediante spl_autoload() o spl_autoload_call().
Si deben haber varias funciones de autocarga, spl_autoload_register() lo permite. De hecho, crea una cola de funciones de autocarga y las recorre en el orden en que fueron definidas. Por el contrario, __autoload() sólo puede definirse una vez.
autoload_function
La función de autocarga a registrar. Si no se proporciona ningún parámetro, será registrada la implementación predeterminada de spl_autoload().
throw
Este parámetro especifica si spl_autoload_register() debería lanzar excepciones cuando el parámetro autoload_function
no puede ser registrado.
prepend
Si es true
, spl_autoload_register() antepondrá el autocargador en la pila de autocarga en vez de posponerlo.
Versión | Descripción |
---|---|
5.3.0 | Se introdujo el soporte para espacios de nombres. |
5.3.0 | Se añadio el parámetro prepend . |
Ejemplo #1 spl_autoload_register() como sustituto de una función __autoload()
<?php
// function __autoload($clase) {
// include 'clases/' . $clase . '.clase.php';
// }
function mi_autocargador($clase) {
include 'clases/' . $clase . '.clase.php';
}
spl_autoload_register('mi_autocargador');
// O, utilizar una función anónima, a partir de PHP 5.3.0
spl_autoload_register(function ($clase) {
include 'clases/' . $clase . '.clase.php';
});
?>
Ejemplo #2 Ejemplo de spl_autoload_register() donde la clase no es cargada
<?php
namespace Foobar;
class Foo {
static public function test($nombre) {
print '[['. $nombre .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test'); // A partir de PHP 5.3.0
new ClaseInexistente;
?>
El resultado del ejemplo sería algo similar a:
[[Foobar\ClaseInexistente]] Fatal error: Class 'Foobar\ClaseInexistente' not found in ...