The ClassMapAutoloader
is designed with performance in mind. The
idea behind it is simple: when asked to load a class, see if it's in the map, and, if
so, load the file associated with the class in the map. This avoids unnecessary
filesystem operations, and can also ensure the autoloader "plays nice" with opcode
caches and PHP's realpath cache.
In order to use the ClassMapAutoloader
, you first need class
maps. Zend Framework also provides a tool for generating these class maps; you can find it in
bin/classmap_generator.php
of the distribution. Full documentation
of this too is provided in “The Class Map Generator utility: bin/classmap_generator.php”.
The first step is to generate a class map file. You may run this over any directory containing source code anywhere underneath it.
php classmap_generator.php Some/Directory/
This will create a file named Some/Directory/autoload_classmap.php
, which
is a PHP file returning an associative array that represents the class map.
Within your code, you will now instantiate the
ClassMapAutoloader
, and provide it the location of the map.
// 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();
At this point, you may now use any classes referenced in your class map.
The ClassMapAutoloader
defines the following options.
ClassMapAutoloader Options
- $options
-
The
ClassMapAutoloader
expects an array of options, where each option is either a filename referencing a class map, or an associative array of class name/filename pairs.As an example:
// 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 513. Using configuration to seed ClassMapAutoloader
Often, you will want to configure your ClassMapAutoloader
.
These values may come from a configuration file, a cache (such as ShMem or
memcached), or a simple PHP array. The following is an example of a PHP array that
could be used to configure the 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', ), );
An eqivalent INI style configuration might look like this:
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"
Once you have your configuration, you can pass it either to the constructor of the
ClassMapAutoloader
, to its
setOptions()
method, or to
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);