设计和目标
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。例如,为和文件系统没有一一映射的类注册的资源加载器。