ZendFramework 的自动加载机制 Autoloader

ZendFramework 的自动加载机制

 

简介

  自动加载(Autoloading)是一种在编码过程中用程序托管代替手动引入(require或include)所依赖的代码文件或类的机制。根据 » the PHP autoload manual, autoloader一经定义,那么在使用尚未定义(或未引入)的类或接口时,将会自动调用。

  使用自动加载机制不用担心类在项目中的具体位置。 通过设计良好的autoloaders不用关心当前class所关联的目标class的位置直接使用即可,自动加载器会自动查找并加载class文件。

  另外,因为自动加载机制的延迟加载并确保只匹配一次,所以特别是在正式部署前去掉多余的require_once()调用,将会获得很大的性能提升。

  ZF鼓励使用自动加载机制,并且提供了一些tools,以便既能够自动加载ZF的核心库代码有能够实现应用代码的自动加载。后面将会介绍这些工具及如何有效的使用他们。 

 

设计和目标 

1、命名规范约定  

      要理解ZF的自动加载机制首先需要理解ZF中类名和类文件之间的关系。ZF借用了» PEAR的类名和文件系统一一对应的理念。简言之,就是用目录分隔符"/"(windows是"\\")来替换类名中的下划线"_"的方式解决文件路径问题,然后添加后缀".php"组成类文件名以映射到文件系统中的具体文件。例如,类"Foo_Bar_Baz"将会被对应到文件系统中的"Foo/Bar/Baz.php"文件。同时假设类可以在PHP'sinclude_path 的相对路径中查找和引入。

      另外,根据PEAR和» PHP project 推荐使用公司名称或项目名称为代码设置通用前缀。这样一来你写的所有类都会共用统一个类前缀;例如,ZF的所有代码都用"Zend_"前缀。这种命名规范可以有效的避免命名冲突。在ZF中通常将此称作为"名称空间"前缀;但注意不要喝PHP内建的 命名空间 混淆。PHP从5.3开始引入内置的 namespace 概念。

      ZF内部遵循这些简单的规则,同时也鼓励开发者使用同样的规则。 

2、自动加载机制的设计约定

     ZF的自动加载机制是由Zend_Loader_Autoloader 提供的,有下面几个目的和设计理念:

a、提供命名空间匹配。

如果类的namespace前缀尚未注册,立即返回FALSE。它允许更多匹配,同时作为其他加载器的后备。

b、允许autoloader作为后备自动加载器。 

在广泛发布的或者使用尚未确定的namespace前缀集的情况下,自动加载器应该仍是可配置的,这样他将尝试匹配任何命名空间前缀。但不推荐这样做,这会导致不必要的查找。

c、允许触发(开关)错误抑制。

错误抑制通常不是个好主意,它会掩盖很多实际的问题。所以,默认是关闭的。当然,如果开发者坚持认为应该开启,也可以开启它。

d、 允许为自动加载指定之定义的回调方法。

有些开发者不想用Zend_Loader::loadClass() 作为自动加载,但仍然想使用ZF的加载机制。Zend_Loader_Autoloader 允许为自动加载机制指定另外的回调方法。

e、允许操作SPL autoload 回调链。 

这样做的目的是允许在ZF的autoloader之前或之后指定注册另外的autoloaders。例如,为和文件系统没有一一映射的类注册的资源加载器。

 

你可能感兴趣的:(framework)