spl_autoload_register()
le permite registrar múltiples funciones (o métodos estáticos de su propia clase Autoload) que PHP colocará en una pila / cola y llamará secuencialmente cuando se declare una "nueva Clase".
Así por ejemplo:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
En el ejemplo anterior, "MyClass" es el nombre de la clase que está intentando instanciar, PHP le pasa este nombre como una cadena spl_autoload_register()
, lo que le permite elegir la variable y usarla para "incluir" la clase / archivo apropiado . Como resultado, no necesita incluir específicamente esa clase a través de una declaración de inclusión / requerimiento ...
Simplemente llame a la clase que desea instanciar como en el ejemplo anterior, y dado que registró una función (vía spl_autoload_register()
) propia que determinará dónde están ubicadas todas sus clases, PHP usará esa función.
El beneficio de usar spl_autoload_register()
es que, a diferencia de __autoload()
usted, no necesita implementar una función de carga automática en cada archivo que cree. spl_autoload_register()
también le permite registrar múltiples funciones de carga automática para acelerar la carga automática y hacerlo aún más fácil.
Ejemplo:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
Con respecto a spl_autoload , el manual dice:
Esta función está destinada a ser utilizada como una implementación predeterminada para __autoload()
. Si no se especifica nada más y spl_autoload_register()
se llama sin ningún parámetro, esta función se utilizará para cualquier llamada posterior __autoload()
.
En términos más prácticos, si todos sus archivos están ubicados en un solo directorio y su aplicación usa no solo archivos .php, sino también archivos de configuración personalizados con extensiones .inc, entonces una estrategia que podría usar sería agregar su directorio que contenga todos Los archivos a PHP incluyen ruta (vía set_include_path()
).
Y dado que también necesita sus archivos de configuración, usaría spl_autoload_extensions()
para enumerar las extensiones que desea que busque PHP.
Ejemplo:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Dado que spl_autoload es la implementación predeterminada del __autoload()
método mágico, PHP llamará a spl_autoload cuando intentes crear una nueva clase.
Espero que esto ayude...