El ClassMapAutoloader está diseñado pensando en el rendimiento. La
idea detrás de él es sencilla: cuando se le pide cargar una clase, comprueba si está en el mapa
y, si es así, carga el archivo asociado a la clase en el mapa. Esto evita operaciones
innecesarias en el sistema de archivos, y también puede asegurar que el autoloader "juegue bien"
con las cachés de opcode y la caché de realpath de PHP.
Para usar el ClassMapAutoloader, primero necesita mapas de
clases. Zend Framework también proporciona una herramienta para generar estos mapas de clases; puede
encontrarla en bin/classmap_generator.php de la distribución. La documentación
completa de esta herramienta se ofrece en Sección 42.9, “The Class Map Generator utility: bin/classmap_generator.php”.
El primer paso es generar un archivo de mapa de clases. Puede ejecutarlo sobre cualquier directorio que contenga código fuente en cualquier lugar debajo de él.
php classmap_generator.php Some/Directory/
Esto creará un archivo llamado Some/Directory/autoload_classmap.php, que
es un archivo PHP que devuelve un array asociativo que representa el mapa de clases.
Dentro de su código, ahora instanciará el
ClassMapAutoloader, y le proporcionará la ubicación del mapa.
// This example assumes ZF is on your include_path.
// You could also load the autoloader class from a path relative to the
// current script, or via an absolute path.
require_once 'Zend/Loader/ClassMapAutoloader.php';
$loader = new Zend_Loader_ClassMapAutoloader();
// Register the class map:
$loader->registerAutoloadMap('Some/Directory/autoload_classmap.php');
// Register with spl_autoload:
$loader->register();
Llegado este punto, ya puede usar cualquier clase referenciada en su mapa de clases.
El ClassMapAutoloader define las siguientes opciones.
Opciones de ClassMapAutoloader
- $options
-
El
ClassMapAutoloaderespera un array de opciones, donde cada opción es un nombre de archivo que referencia un mapa de clases, o un array asociativo de pares nombre de clase/nombre de archivo.Como ejemplo:
// Configuration defining both a file-based class map, and an array map $config = array( __DIR__ . '/library/autoload_classmap.php', // file-based class map array( // array class map 'Application_Bootstrap' => __DIR__ . '/application/Bootstrap.php', 'Test_Bootstrap' => __DIR__ . '/tests/Bootstrap.php', ), );
Ejemplo 42.9. Uso de configuración para inicializar ClassMapAutoloader
A menudo, querrá configurar su ClassMapAutoloader.
Estos valores pueden provenir de un archivo de configuración, una caché (como ShMem o
memcached), o un simple array de PHP. Lo siguiente es un ejemplo de un array de PHP que
podría usarse para configurar el autoloader:
// Configuration defining both a file-based class map, and an array map
$config = array(
APPLICATION_PATH . '/../library/autoload_classmap.php', // file-based class map
array( // array class map
'Application_Bootstrap' => APPLICATION_PATH . '/Bootstrap.php',
'Test_Bootstrap' => APPLICATION_PATH . '/../tests/Bootstrap.php',
),
);
Una configuración equivalente en estilo INI podría verse así:
classmap.library = APPLICATION_PATH "/../library/autoload_classmap.php" classmap.resources.Application_Bootstrap = APPLICATION_PATH "/Bootstrap.php" classmap.resources.Test_Bootstrap = APPLICATION_PATH "/../tests/Bootstrap.php"
Una vez que tenga su configuración, puede pasarla al constructor del
ClassMapAutoloader, a su método
setOptions(), o a
registerAutoloadMaps().
/* The following are all equivalent */ // To the constructor: $loader = new Zend_Loader_ClassMapAutoloader($config); // To setOptions(): $loader = new Zend_Loader_ClassMapAutoloader(); $loader->setOptions($config); // To registerAutoloadMaps(): $loader = new Zend_Loader_ClassMapAutoloader(); $loader->registerAutoloadMaps($config);