(PHP 5 >= 5.1.2, PHP 7)
spl_autoload_register — Registrar las funciones dadas como implementación de __autoload()
$autoload_function
[, bool $throw
= true
[, bool $prepend
= false
]]] )Registra 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 permitie. 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.
Devuelve TRUE
en caso de éxito o FALSE
en caso de error.
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 ...