Autoloader
1. Sistema de Carga Automática (Autoloading)
PSR-4 Compatible: Soporte para estructura de directorios según el estándar PSR-4.
Búsqueda Recursiva: Fallback recursivo en directorios si no se encuentra la clase en la estructura PSR-4.
On-Demand: Carga clases solo cuando son requeridas (no carga todo al inicio).
PSR-4 Compatible: Soporte para estructura de directorios según el estándar PSR-4.
Búsqueda Recursiva: Fallback recursivo en directorios si no se encuentra la clase en la estructura PSR-4.
On-Demand: Carga clases solo cuando son requeridas (no carga todo al inicio).
2. Sistema de Caché Avanzado
Almacenamiento por FQCN: Usa el Fully Qualified Class Name como clave en el caché.
Persistencia en Disco: Guarda el caché en un archivo (autoloader_cache.dat) entre ejecuciones.
Auto-Limpieza: Elimina entradas inválidas si el archivo de clase no existe.
Regeneración Manual: Método rebuildClassmap() para precargar todas las clases.
Almacenamiento por FQCN: Usa el Fully Qualified Class Name como clave en el caché.
Persistencia en Disco: Guarda el caché en un archivo (autoloader_cache.dat) entre ejecuciones.
Auto-Limpieza: Elimina entradas inválidas si el archivo de clase no existe.
Regeneración Manual: Método rebuildClassmap() para precargar todas las clases.
3. Manejo de Rutas
Múltiples Paths: Soporta múltiples directorios de búsqueda con addPath().
Rutas Reales: Usa realpath() para evitar problemas con rutas relativas/simbólicas.
Múltiples Paths: Soporta múltiples directorios de búsqueda con addPath().
Rutas Reales: Usa realpath() para evitar problemas con rutas relativas/simbólicas.
4. Diagnóstico y Depuración
Logs Detallados: Mensajes de depuración con timestamp (activables con enableDebug()).
Método de Diagnóstico: diagnoseClassLoading() para identificar problemas de carga.
Detección de Clases: Verifica nombres de clases, interfaces y traits con análisis de tokens PHP.
Logs Detallados: Mensajes de depuración con timestamp (activables con enableDebug()).
Método de Diagnóstico: diagnoseClassLoading() para identificar problemas de carga.
Detección de Clases: Verifica nombres de clases, interfaces y traits con análisis de tokens PHP.
5. Optimizaciones
Singleton: Solo una instancia por aplicación (patrón Singleton).
Evita Cargas Duplicadas: Registra archivos ya cargados con require_once.
Cache Opcional: Puede desactivarse con enableCache(false).
Singleton: Solo una instancia por aplicación (patrón Singleton).
Evita Cargas Duplicadas: Registra archivos ya cargados con require_once.
Cache Opcional: Puede desactivarse con enableCache(false).
6. Seguridad y Robustez
Validación de Archivos: Verifica que los archivos existan antes de cargarlos.
Manejo de Errores: Silencia errores con @ en operaciones críticas (ej: file_get_contents).
Exclusión de Puntos (.): Ignora directorios . y .. en búsquedas recursivas.
Validación de Archivos: Verifica que los archivos existan antes de cargarlos.
Manejo de Errores: Silencia errores con @ en operaciones críticas (ej: file_get_contents).
Exclusión de Puntos (.): Ignora directorios . y .. en búsquedas recursivas.
7. Extensibilidad
Cache Personalizable: Permite inyectar implementaciones de caché externas con setCache().
Force Load: Carga manual de archivos específicos con forceLoad().
Cache Personalizable: Permite inyectar implementaciones de caché externas con setCache().
Force Load: Carga manual de archivos específicos con forceLoad().
8. Soporte para Estructuras Complejas
Namespaces Anidados: Detecta correctamente clases en namespaces multinivel.
Clases/Interfaces/Traits: Soporte para los tres tipos de estructuras PHP.
Ejemplo de uso en diferentes escenarios:
Namespaces Anidados: Detecta correctamente clases en namespaces multinivel.
Clases/Interfaces/Traits: Soporte para los tres tipos de estructuras PHP.
1. Configuración básica (desarrollo):
require_once 'Autoloader.php'; $autoloader = Autoloader::getInstance(__DIR__.'/src') ->enableDebug() // Mostrar mensajes de depuración ->addPath(__DIR__.'/lib') // Añadir rutas adicionales ->register(); // Registrar el autoloader
2. Configuración para producción:
require_once 'Autoloader.php'; $autoloader = Autoloader::getInstance(__DIR__.'/src') ->enableCache() // Habilitar caché (activado por defecto) ->register(); // Reconstruir el classmap durante el despliegue $autoloader->rebuildClassmap();
3. Script para reconstruir el classmap (rebuildClassMap.php):
#!/usr/bin/env php
<?php
require __DIR__.'/Autoloader.php';
echo "Rebuilding autoloader classmap...\n";
$autoloader = Autoloader::getInstance(__DIR__.'/src')
->addPath(__DIR__.'/vendor')
->enableCache();
$autoloader->rebuildClassmap();
echo "Classmap rebuilt successfully!\n";
echo "Total cached classes: " . count($autoloader->diagnoseClassLoading('')) . "\n";4. Diagnóstico de problemas:
// Cuando una clase no se carga correctamente echo $autoloader->diagnoseClassLoading('My\\Problematic\\Class');
Comentarios
Publicar un comentario