Imaginemos que organizamos nuestro código en diferentes archivos, cada uno con una clase y con el nombre de la clase como nombre del archivo. Por ejemplo, UnaClase.php y OtraClase.php contendrán las definiciones de class UnaClase y class OtraClase repectivamente. Para inicializar estas clases desde otro script podríamos hacer algo así:
// incluir los archivos que contienen las clases
include_once 'UnaClase.php';
include_once 'OtraClase.php';

// inicializar los objetos
$objeto1 = new UnaClase();
$objeto2 = new OtraClase();
Todo perfecto. Sigues trabajando en la aplicación y vas definiendo nuevas clases en cada vez más archivos que tienes acordarte de incluir en tu script:
// incluir los archivos que contienen las clases
include_once 'UnaClase.php';
include_once 'OtraClase.php';
include_once 'MasClase.php';
include_once 'CuartaClase.php';
include_once  'YtodaviamasClase.php';

// inicializar los objetos
$objeto1 = new UnaClase();
$objeto2 = new OtraClase();
$objeto3 = new MasClase();
//...
No hay nada de malo en el código anterior, funcionará perfectamente. Asegúrate de incluir todos los archivos y no tendrás ningún problema. Pero, ¿y si no siempre los necesito todos?. Da igual, cárgalos todos por si acaso o haz condicionales para su carga. ¿Y si tengo 50 archivos? Pues tendrás que hacer 50 include. Vaya coñazo, que incomodidad; y como se me olvide algún archivo …. Fatal ERROR al canto.

Autoloaders al rescate!!!! 435v6


En lugar de tener que cargar (en inglés load) cada una de las clases de nuestra aplicación manualmente, podemos registrar un autoloader. Como su nombre indica, el autoloader está destinado a cargar de forma automática las clases utilizadas. Cada vez que se intenta inicializar una clase y la clase no existe, el nombre de esta clase se pasa al autoloader y este es ejecutado. En el autoloader podremos automatizar el proceso de carga sin tener que incluir manualmente cada archivo y además nos permite hacer el código más rápido, pues sólo se cargarán las clases que efectivamente se utilicen.

Para registrar un autoloader se utiliza la función spl_autoload_()pasando como primer parámetro la función que hará de autoloader:
//Registramos mi_autoloader() como callback que se ejecutará
//al intentar inicializar una clase que no existe
spl_autoload_('mi_autoloader');

//implementamos mi_autoloader(), que recibe el nombre de la clase
//que se ha intentado inicializar
function mi_autoloader( $NombreClase ) {
    include_once $NombreClase . '.php';
}
Desde PHP 5.3.0 podemos utilizar funciones anónimas:
spl_autoload_( funcion( $NombreClase ) {
    include_once $NombreClase . '.php';
} );

// inicializar los objetos
$objeto1 = new UnaClase();
$objeto2 = new OtraClase();

if( $alguna_condicion ) {
    // Ganamos en performance. MasClase.php solo se cargará
    // si se verifica $alguna_condicion y llegamos hasta este punto
    $objeto3 = new MasClase();
}
Cómo ves, es necesario conocer los nombres de los archivos que se necesitan cargar. Por eso es muy importante seguir unas reglas fijas de nomenclatura de clases y archivos. El ejemplo anterior de utilizar una sola clase por cada archivo y dar al archivo el mismo nombre que la clase sería una regla aceptable. Puedes seguir tus propias reglas aunque es recomendable utilizar reglas estandarizadas y de amplio uso, por ejemplo el estándar PSR-4.

Olvídate de __autoload 1r1j3a


Si no defines tu propio autoloader como hemos hecho anteriormente, puedes utilizar el método mágico __autoload():
function __autoload( $nombreclass ) {
    //incluir el archivo de la clase
    include_one $nombreclass . '.php';
}

// inicializar los objetos
$objeto1 = new UnaClase();
$objeto2 = new OtraClase();
Se puede decir que __autoload sería el autoloader por defecto. Sin embargo, tal y como se menciona en la documentación de PHP sobre autocarga de clases, se recomienda spl_autoload_ por su mayor flexibilidad, pero además advierte que __autoload puede ser marcado como obsoleto o eliminarse en el futuro, así que olvídate ya de este método y utiliza siempre spl_autoload_.
Compartir

Mi nombre es Alexander fundador y CEO, y me gusta llamarme un Geek. Amo la informática, tecnología y todo lo que está relacionado con ella. Inicié este sitio con la intención de compartir conocimientos como cursos en línea, tutoriales y videotutoriales. Estoy muy entusiasmado con la información que he descubierto y compartido hasta el momento. La verdad es que lo he hecho con el mayor de los gustos. Así es, soy un Geek con una visión para compartir conocimiento. Leer mas... 2c611u