Heads-up! You're reading an old post and the information in it is quite probably outdated.
The latest, and last, release of the Zend Framework 1.x series is just around the corner as ZF 1.12.0RC1 was announced this week. As I still have projects running ZF1 I thought about giving the most interesting new feature (for me) a spin - the new autoloaders which are backported from ZF2.
Note: the code below was updated to work with ZF 1.12.0RC2. Should still work with RC1, too.
I decided using the classmap autoloader as the main autoloader, and the good ol’ standard autoloader as the fallback autoloader. For the classmap autoloader to work we need to create a classmap. ZF1.12 comes with a tool, located in the
bin directory, called
classmap_generator.php, which will generate the classmap for us:
$ cd /path/to/project/library
$ php /path/to/zf1.12/bin/classmap_generator.php
This will generate a PHP file called
autoload_classmap.php in the
library directory and it will have classname - filename mappings of the classes/files from that directory.
Next, need to change the
index.php a bit to tell ZF to use the new autoloaders:
// normal setting up of APPLICATION_PATH and other constants here ...
// Ensure library/ is on include_path
realpath(APPLICATION_PATH . '/../library'),
// As of ZF1.12.0RC2 the Zend prefix is not autoregistered
// with the standard autoloader, so we need to require explicitly
// the ClassMapAutoloader.php
'Zend_Loader_ClassMapAutoloader' => array(
__DIR__ . '/../library/autoload_classmap.php',
__DIR__ . '/../application/autoload_classmap.php'
'Zend_Loader_StandardAutoloader' => array(
'prefixes' => array(
'Zend' => __DIR__ . '/../library/Zend'
'fallback_autoloader' => true
// set up Zend_Application as normal here ...
and that’s about it - the autoloader will load classes from the classmaps, but if it fails to do so, it will fall back to the standard autoloader.
Stripping out require_once calls
The Zend Framework manual has a section on how to improve performance of the framework itself, and one of the suggestion is to strip out the
require_once calls from the library. I had to alter that find/sed command combination a bit in order to make it work with the classmaps:
$ find . -name '*.php' \
-not -wholename '*/Application.php' \
-not -wholename '*/Loader*' \
-print0 | xargs -0 \
sed --regexp-extended \
--in-place 's/(require_once)/\/\/ \1/g'
If I’m not wrong in reading my “debugging” echo statements, the standard autoloader gets called only once - to load the classmap autoloader itself - everything else is loaded via the classmaps. Pretty cool.