This example describes the autoloading usage of the Zend Framework tutorial. Share to everyone for your reference, as follows:
I. Overview
Automatic loading is a mechanism that does not rely on manual PHP code writing. Refer to the»php manual for automatic loading, once the autoloader is defined and you try to use a class or interface that is not defined, it is automatically called.
With automatic loading, you don't have to worry about where the classes are stored in your project. Define a well-defined autoloader, you do not need to consider the location of a class file relative to the current class file, you only need to use the class, the autoloader will automatically find the file.
In addition, automatic loading ensures that it is loaded only once and improves performance-so you can use it instead of require_once ().
The Zend Framework encourages the use of automatic loading and provides many tools for automating the loading of code libraries and application code. These tools are described below, and how to use them effectively.
Implementation conventions for automatic loading
Class Naming conventions
The Zend framework draws on the pear idea that the class name has a 1:1 relationship with the file system. Simply put, the underscore character ("_") replaces the directory separator to represent the path of the file, and then adds the suffix ". php". For example, the class "Foo_bar_baz" will correspond to "foo/bar/baz.php" on the file system. Suppose that the location of the class has been set through PHP include_path, which makes it possible to find the file name with the path set in relative include_path through include () and require ().
In addition, it is recommended to prefix the vendor name or project name. This means that all classes you write have a common class prefix, for example, all code prefixes for the Zend framework are "Zend_". This naming convention helps prevent naming conflicts. In Zendframework, we often refer to the "namespace" prefix, and be careful not to confuse it with PHP's local namespace.
Auto Loader Design Conventions
The Zend framework supports automatic loading via the Zend_loader_autoloader, and mainly provides the following objectives and design elements:
provides namespace matching. Returns false if the namespace prefix of the class is not a registered namespace.
Allows you to define the autoloader as an alternate autoloader. A team may be widely distributed, or use a namespace prefix that is defined in case it tries to match any namespace prefix. However, this practice is not recommended because it may lead to unnecessary lookups.
Allows the disable error prompt to be turned on. Therefore, by default, it should be turned off. During the development phase, you can enable it.
Automatic loading can be customized. Some developers do not want to use Zend_loader::loadclass () to automatically load, but still want to use the Zend Framework's automatic loading mechanism. Zend_loader_autoloader allows the use of custom automatic loading.
Allows the callback chain to be loaded automatically using SPL. The purpose of this is to allow additional autoloader to be specified.
Second, usage:
In general, you simply need to introduce the containing class and then instantiate it. Because of the singleton pattern used by Zend_loader_autoloader, you can use the getinstance () method to get an instance.
Require_once ' zend/loader/autoloader.php '; Zend_loader_autoloader::getinstance ();
By default, any class with a namespace prefix of "Zend_" or "zendx_" can be loaded, as long as you have specified include_path.
What if you want to use a different namespace prefix? The best and easiest way is to call the Registernamespace () method. You can pass a single namespace prefix, or an array:
Require_once ' zend/loader/autoloader.php '; $loader = Zend_loader_autoloader::getinstance (); $loader Registernamespace (' Foo_ '); $loader->registernamespace (Array (' Foo_ ', ' bar_ '));
Alternatively, you can use Zend_loader_autoloader as an "alternate" autoloader. This means that if the namespace is defined, it will attempt to load automatically.
$loader->setfallbackautoloader (TRUE);
(Note: This method is not recommended, try not to use it).
The internal implementation of Zend_loader_autoloader is using the Zend_loader::loadclass () load class. The method uses an include () to attempt to load the given class file. Include () returns a Boolean value that returns False if not successfully-and also emits a PHP warning. The following issues may be caused:
If Display_errors is enabled, the warning is included in the output.
Depending on the level of error_reporting you configure, it can also be exported to the log.
You can suppress these error messages, as follows: (but note that when Display_errors is enabled, the error log is always displayed.) )
$autoloader->suppressnotfoundwarnings (TRUE);
Select a version of the Zend Framework
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/
$autoloader->setzfpath ($path, ' latest ');
$autoloader->setzfpath ($path, ' 1.8 ');
$autoloader->setzfpath ($path, ' 1.7.7 ');
You can also use a configuration file
[Production]autoloaderzfpath = "path/to/zendframework" autoloaderzfversion = "1.7.7" [qa]autoloaderzfversion = "1.8" [ Development]autoloaderzfversion = "latest"
Autoloader interface
Note: namespace prefixes and PHP namespaces
PHP5.3 has been released. In this version, PHP now officially supports namespaces.
However, the namespace of the Zend framework is completely different from the namespace of PHP 5.3. The "namespace" referred to in the Zend framework refers to a class prefix. For example, the prefix "Zend_" for all Zend framework class names. This is the "namespace" that we specified.
The native PHP namespace is used in the Zend Framework 2.0.0.
In addition to being able to specify arbitrary callbacks, the Zend framework defines an interface zend_loader_autoloader_interface that requires the automatic loading of class implementations:
Interface zend_loader_autoloader_interface{public function AutoLoad ($class);}
If you want to use the custom autoloader in the Zend framework, you can use the Zend_loader_autoloader pushautoloader () and Unshiftautoloader () methods.
By using these methods, the custom loader is appended to or before the internal auto loader of the Zend Framework.
Each method accepts an optional second parameter, the namespace prefix of the class. The autoloader only looks for the given class prefix. If the class prefix is not specified, the autoloader is skipped, which can be a performance improvement.
When using this interface, you need to pass the class instance to the Pushautoloader () and Unshiftautoloader () methods of the Zend_loader_autoloader class, as follows:
Append function ' My_autoloader ' to the stack,//-manage classes with the prefix ' my_ ': $loader->pushautoloader (' My_ Autoloader ', ' my_ ');//Prepend static method Foo_loader::autoload () to the stack,//-manage classes with the prefix ' Foo _ ': $loader->unshiftautoloader (Array (' Foo_loader ', ' autoload '), ' foo_ ');//Assume Foo_autoloader implements Zend_ Loader_autoloader_interface: $foo = new Foo_autoloader (), $autoloader->pushautoloader ($foo, ' foo_ ');
Related Methods of Zend_loader_autoloader
array
Method |
Return Value |
Parameters |
Description |
GetInstance () |
Zend_loader_autoloader |
N/A |
Get instance |
Resetinstance () |
void |
N/A |
Resets the state of the Zend_loader_autoloadersingleton instance, restores its original state, unregisters all the autoloader callbacks, and all registered namespaces.
|
autoload ($class) |
< Code class= "code" >string| FALSE |
|
Try to load a class. |
setdefaultautoloader ($callback) |
zend_loader_autoloader |
|
Specifies the default loader callback |
getdefaultautoloader () |
callback |
n/a |
Gets the default loader interface; The default is zend_loader::loadclass () . |
setautoloaders (array $autoloaders) |
zend_loader_autoloader |
|
settings in the autoloader stack using the specific autoloader list. Each item in the Autoloader list must be phpcallback. |
getautoloaders () |
< Span class= "type" >array |
n/a |
|
getnamespaceautoloaders ($namespace) | TD align= "left" >
|
Get all the registered Autoloader to load a specific namespace. |
registernamespace ($namespace) |
zend_loader_autoloader |
|
Register namespace. If $namespace is a string, it registers that namespace; If it's an array of strings, registers each as a namespace. |
unregisternamespace ($namespace) |
zend_loader_autoloader |
|
|
getregisterednamespaces () |
array |
n/a |
|
suppressnotfoundwarnings ($flag = null) |
boolean| Zend_loader_autoloader |
|
error prompt |
setfallbackautoloader ($flag) |
zend_loader_autoloader |
|
|
Isfallbackautoloader () |
Boolean |
N/A |
|
Getclassautoloaders ($class) |
Array |
|
|
unshiftautoloader ($callback, $namespace = ") |
zend_loader_autoloader |
-
$callback , Required . A valid phpcallback
-
$namespace , Optional . A string representing a class prefix namespace.
|
|
pushautoloader ($callback, $namespace = ') |
zend_loader_autoloader |
-
$callback , Required . A valid phpcallback
-
$namespace , Optional . A string representing a class prefix namespace.
|
|
removeautoloader ($callback, $namespace = ') |
zend_loader_autoloader |
-
$callback , Required . A valid phpcallback
-
$namespace , Optional . A string representing a class prefix namespace, or an array of namespace strings.
|
More interested in Zend related content readers can view the topic: "Zend framework of the introductory tutorial", "PHP Excellent Development Framework Summary", "Yii framework Introduction and common skills Summary", "thinkphp Introductory Tutorial", "PHP object-oriented Programming introduction tutorial "," Introduction to Php+mysql Database Operation "and" PHP common database Operation Skills Summary "
I hope this article is helpful to you in PHP programming.