Saltar al contenido

¿Qué es la carga automática? ¿Cómo se usan spl_autoload, __autoload y spl_autoload_register?

Este escrito fue probado por nuestros expertos así se asegura la veracidad de este escrito.

Solución:

spl_autoload_register() le permite registrar múltiples funciones (o static métodos 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á tratando de instanciar, PHP pasa este nombre como un string para spl_autoload_register(), que le permite seleccionar 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 (a través de spl_autoload_register()) propio que averiguará dónde se encuentran todas sus clases, PHP usará esa función.

El beneficio de usar spl_autoload_register() es que a diferencia de __autoload() 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 hacerla 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á pensada para 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 a __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, por ejemplo, entonces una estrategia que podría usar sería agregar su directorio que contenga todos archivos a la ruta de inclusión de PHP (a través de 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 PHP busque.

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 de la __autoload() método mágico, PHP llamará a spl_autoload cuando intente instanciar una nueva clase.

Espero que esto ayude…

Desde PHP 5.3, puedes usar spl_autoload_register() con espacios de nombres, lo que significa que puede organizar su proyecto y cargar automáticamente sus clases de php sin ningún requisito o inclusión y sin redefinir un __autoload() función.

Para demostrar este comportamiento, simplemente cree un archivo llamado index.php:

Luego crea una carpeta llamada Principal ubicada justo al lado del archivo index.php. Finalmente, crea un archivo llamado Application.php ubicado en Main y pega el siguiente código en él:

Sección de Reseñas y Valoraciones

Recuerda compartir este escrito si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología