Zend Framework 自动加载之二:目标和设计

来源:互联网 发布:图片标注尺寸软件 编辑:程序博客网 时间:2024/05/24 06:36

类的命名约定

为了理解 Zend Framework 中的自动加载,首先你要理解类的名字和类的文件之间的关系。

ZEND FRAMEWORK 从 >> PEAR 中借鉴了一个概念,即类的名字和文件系统有一种1:1的关系。简单的说,为了解析到文件的路径,下划线被路径分割符代替,然后再加上 .php 的后缀。例如,类 Foo_Bar_Baz 将会和文件系统上的 Foo/Bar/Baz.php 文件对应。同时还假设类可以通过 PHP 的 includ_path 路径设置被解析,这将允许 include() 和 require() 都能在 include_path 路径上通过一个相对路径查找从而找到文件名。

另外,每一个 PEAR,正如每一个 PHP 项目,我们使用并且建议你的代码也使用一个 VENDOR 或者项目前缀。这意味着你所写的全部类将共享一个通用的类前缀,例如,在 Zend Framework 里面的全部代码都有 Zend_ 前缀。这个命名约定有助于阻止命名冲突。在 Zend Framework 内部,我们通常把这个称为 命名空间 前缀,请注意不要和 PHP 的本地命名空间搞混。

Zend Framework 内部代码遵循这些简单的规则,我们的编码标准鼓励你也这样做。

自动加载器规则和设计

主要由 Zend_Loader_Autoloader 提供的 Zend Framework 自动加载支持有以下目标和设计元素:

  • 提供命名空间匹配。如果类的命名空间的前缀不在已经注册的命名空间的清单中,立刻返回 FALSE。这将允许更多乐观的匹配,同时回调(fallback)到其它自动加载器。
  • 允许自动加载器扮演一个回调(fallback)自动加载器。在一个分布广泛的团队,或者使用一套没有明确定义的命名空间前缀的个案中,自动加载器应该仍然可以配置,以便它会试图匹配任何的命名空间前缀。需要注意的是,然而,这样的实践不被建议,因为它会导致不必要的查找。
  • 允许切换错误抑制。我们觉得 ——同时大部分的 PHP 社区也是这样认为 ——错误抑制是一个糟糕的主意。它的代价昂贵,同时它掩盖了真实应用程序的问题。所以,默认的,它应该被关闭。然而,如果一个开发者坚持它要被打开,我们允许切换到开启状态。
  • 允许为自动加载定制 callbacks。一些开发者不想使用 Zend_Loader::loadClass() 来自动加载,但却想使用 Zend Framework 的机制。Zend_Loader_Autoloader() 允许指定一个代替的 callback 来自动加载。
  • 允许执行 SPL 自动加载 callback 链。这样做的目的是为了允许指定额外的自动加载器——例如,针对和文件系统没有1:1映射关系的类提供的资源加载器——在 Zend Framwork 主要的自动加载器之前或之后注册。