Zend Framework教程之Autoloading用法详解(2)

然而,Zend Framework的命名空间和PHP 5.3的命名空间完全不同的。 Zend Framework中,提到的“命名空间”,是指一个类前缀。例如,所有的Zend Framework的类名称的前缀“Zend_”。 这是我们指定的“命名空间”。

在Zend Framework 2.0.0使用了原生的PHP命名空间。

自动加载器除了能够指定任意回调以外,Zend Framework还定义了一个需要自动加载类实现的接口Zend_Loader_Autoloader_Interface:

interface Zend_Loader_Autoloader_Interface { public function autoload($class); }

如果您希望在Zend Framework中使用自定义的自动加载器,可以使用 Zend_Loader_Autoloader的 pushAutoloader()和unshiftAutoloader()方法。
通过这些方法将在Zend Framework的内部自动装载器之后追加或之前使用自定义的加载器。

每个方法接受一个可选的第二个参数,类的命名空间前缀。自动加载器只查找给定的类前缀。如果不是指定的类前缀,将跳过自动加载器 , 这可能是一种性能改进方式。

当使用这个接口时,你需要传递类实例到Zend_Loader_Autoloader类的pushAutoloader()和unshiftAutoloader()方法,具体如下:

// Append function 'my_autoloader' to the stack, // to manage classes with the prefix 'My_': $loader->pushAutoloader('my_autoloader', 'My_'); // Prepend static method Foo_Loader::autoload() to the stack, // to 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_');

Zend_Loader_Autoloader的相关方法

Method Return Value Parameters Description
getInstance()   Zend_Loader_Autoloader   N/A  

获取实例

 
resetInstance()   void   N/A  

重置Zend_Loader_Autoloadersingleton实例的状态,恢复它的原始状态,注销所有的自动加载器回调和所有注册的命名空间。

 
autoload($class)   string|FALSE  

$class,required. A string class name to load.

 

试图加载一个类。

 
setDefaultAutoloader($callback)   Zend_Loader_Autoloader  

$callback,required.

 

指定默认的加载器回调

 
getDefaultAutoloader()   callback   N/A  

获取默认的加载器接口;默认是Zend_Loader::loadClass().

 
setAutoloaders(array $autoloaders)   Zend_Loader_Autoloader  

$autoloaders,required.

 

设置在自动加载器栈使用具体的自动加载器列表。自动加载器列表中的每个项目必须是PHPcallback。

 
getAutoloaders()   Array   N/A    
getNamespaceAutoloaders($namespace)   Array  

$namespace,required

 

获取所有已注册的自动加载器来加载一个特定的的命名空间。

 
registerNamespace($namespace)   Zend_Loader_Autoloader  

$namespace,required.

 

注册命名空间. 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  

$namespace,required.

 


 
getRegisteredNamespaces()   Array   N/A  


 
suppressNotFoundWarnings($flag = null)   boolean|Zend_Loader_Autoloader  

$flag,optional.

 

错误提示

 
setFallbackAutoloader($flag)   Zend_Loader_Autoloader  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6b1a61bdb6317e179978037ec1ef8cb8.html