Typically, you will use the version of Zend Framework that the autoloader you
instantiate came with. However, when developing a project, it's often useful to track
specific versions, major or minor branches, or just the latest version.
Zend_Loader_Autoloader, as of version 1.10, offers some features
to help manage this task.
Imagine the following scenario:
-
During development, you want to track the latest version of Zend Framework you have installed, so that you can ensure the application works when you upgrade between versions.
When pushing to Quality Assurance, however, you need to have slightly more stability, so you want to use the latest installed revision of a specific minor version.
Finally, when you push to production, you want to pin to a specific installed version, to ensure no breakage occurs if or when you add new versions of Zend Framework to you server.
The autoloader allows you to do this with the method
setZfPath(). This method takes two arguments, a
path to a set of Zend Framework installations, and a
version to use. Once invoked, it prepends a path to the
include_path pointing to the appropriate Zend Framework
installation library.
The directory you specify as your path should have a tree such as the following:
ZendFramework/ |-- 1.9.2/ | |-- library/ |-- ZendFramework-1.9.1-minimal/ | |-- library/ |-- 1.8.4PL1/ | |-- library/ |-- 1.8.4/ | |-- library/ |-- ZendFramework-1.8.3/ | |-- library/ |-- 1.7.8/ | |-- library/ |-- 1.7.7/ | |-- library/ |-- 1.7.6/ | |-- library/
(where path points to the directory "ZendFramework" in the above example)
Note that each subdirectory should contain the directory library,
which contains the actual Zend Framework library code. The individual subdirectory names
may be version numbers, or simply be the untarred contents of a standard Zend Framework
distribution tarball/zipfile.
Now, let's address the use cases. In the first use case, in development, we want to track the latest source install. We can do that by passing "latest" as the version:
<?php
$autoloader->setZfPath($path, 'latest');
In the example from above, this will map to the directory
ZendFramework/1.9.2/library/; you can verify this by checking the
return value of getZfPath().
In the second situation, for quality assurance, let's say we want to pin to the 1.8 minor release, using the latest install you have for that release. You can do so as follows:
<?php
$autoloader->setZfPath($path, '1.8');
In this case, it will find the directory
ZendFramework/1.8.4PL1/library/.
In the final case, for production, we'll pin to a specific version -- 1.7.7, since that was what was available when Quality Assurance tested prior to our release.
<?php
$autoloader->setZfPath($path, '1.7.7');
Predictably, it finds the directory ZendFramework/1.7.7/library/.
You can also specify these values in the configuration file you use with
Zend_Application. To do so, you'd specify the following
information:
[production] autoloaderZfPath = "path/to/ZendFramework" autoloaderZfVersion = "1.7.7" [qa] autoloaderZfVersion = "1.8" [development] autoloaderZfVersion = "latest"
Note the different environment sections, and the different version specified in each
environment; these factors will allow Zend_Application to
configure the autoloader appropriately.
Performance implications
For best performance, either do not use this feature, or specify a specific Zend Framework version (i.e., not "latest", a major revision such as "1", or a minor revision such as "1.8"). Otherwise, the autoloader will need to scan the provided path for directories matching the criteria -- a somewhat expensive operation to perform on each request.




