文字

The Yaf_Loader class

(Yaf >=1.0.0)

简介

Yaf_Loader 类为Yaf提供了自动加载功能的全面解决方案。

在第一次使用的时候,将检索 Yaf_Application 的实例, Yaf_Loader 实现了单利模式,并使用spl_autoload注册它自己。 通过 Yaf_Loader::getInstance() 返回它的实例

Yaf_Loader 加载一个类时仅仅尝试一次,如果失败了, 后面的操作将取决于yaf.use_spl_auload, 如果这个配置项为On, Yaf_Loader::autoload() 将会返回FALSE, 从而把机会让给其他的自动加载功能。如果这个配置项为Off(默认), Yaf_Loader::autoload() 将会返回TRUE, 最重要的是将会抛出一个非常有用的警告(对于找出一个类加载失败非常有用)。

Note:

请保持yaf.use_spl_autoload保持关闭,除非有一些library有自己的autoload机制,并且是无法改写的。

默认情况下,Yaf_Loader 收集所有library(类定义的脚本)储存进在 php.ini(yaf.library)定义的global library directory之中。

如果你想使用 Yaf_Loader 搜索本地类(库)(定义在application.ini, 默认情况下,它是 application.directory . "/libraray"), 你需要使用 Yaf_Loader::registerLocalNameSpace() 注册本地类前缀。

让我们来看看一些例子(假设 APPLICATION_PATH 是 application.directory):

Example #1 Config example

// Assuming the following configure in php.ini:
yaf.libraray = "/global_dir"//Assuming the following configure in application.ini
application.libraray = APPLICATION_PATH "/library"
假设以下本地名称空间已被注册:

Example #2 注册本地命名空间

<?php
class  Bootstrap  extends  Yaf_Bootstrap_Abstract {
     public function 
_initLoader ( $dispatcher ) {
          
Yaf_Loader :: getInstance ()-> registerLocalNameSpace (array( "Foo" "Bar" ));
     }
?>
自动加载例子:

Example #3 加载类

class Foo_Bar_Test =>
  // APPLICATION_PATH/library/Foo/Bar/Test.php
  
class GLO_Name  =>
  // /global_dir/Glo/Name.php
 
class BarNon_Test
  // /global_dir/Barnon/Test.php
在PHP 5.3中,你可以使用命名空间:

Example #4 加载命名空间类

class \Foo\Bar\Dummy =>
   // APPLICATION_PATH/library/Foo/Bar/Dummy.phpclass \FooBar\Bar\Dummy =>
   // /global_dir/FooBar/Bar/Dummy.php

你可能会注意到所有文件夹名字的首字母是大写的,你可以通过在php.ini中设置 yaf.lowcase_path = On 来将它们小写。

Yaf_Loader 也是设计来加载MVC类,响应的规则如下:

Example #5 MVC类加载例子

Controller Classes =>
// APPLICATION_PATH/controllers/Model Classes =>
// APPLICATION_PATH/models/Plugin Classes =>
// APPLICATION_PATH/plugins/
Yaf 通过识别一个类的后缀(这个是默认的,你也可以通过改变配置项 yaf.name_suffix 来将它改为通过前缀识别)来决定它是否是一个MVC类:

Example #6 MVC 类区别

Controller Classes =>
    // ***ControllerModel Classes =>
    // ***ModelPlugin Classes =>
    // ***Plugin
some examples:

Example #7 MVC loading example

class IndexController
    // APPLICATION_PATH/controllers/Index.phpclass DataModel =>
   // APPLICATION_PATH/models/Data.phpclass DummyPlugin =>
  // APPLICATION_PATH/plugins/Dummy.phpclass A_B_TestModel =>
  // APPLICATION_PATH/models/A/B/Test.php
该目录将受 yaf.lowcase_path 的影响。

类摘要

Yaf_Loader {
protected $_local_ns ;
protected $_library ;
protected $_global_library ;
static $_instance ;
public void autoload ( void )
public void clearLocalNamespace ( void )
private void __clone ( void )
private __construct ( void )
public static void getInstance ( void )
public Yaf_Loader getLibraryPath ([ bool $is_global = false ] )
public void getLocalNamespace ( void )
public static void import ( void )
public void isLocalName ( void )
public void registerLocalNamespace ([ mixed $prefix ] )
public Yaf_Loader setLibraryPath ( string $directory [, bool $is_global = false ] )
private void __sleep ( void )
private void __wakeup ( void )
}

属性

_local_ns

_library

默认情况下,它的值是 application.directory . "/library", 你可以通过修改application.ini(application.library)或者调用 Yaf_Loader::setLibraryPath() 改变它。

_global_library

_instance

Table of Contents

  • Yaf_Loader::autoload — The autoload purpose
  • Yaf_Loader::clearLocalNamespace — The clearLocalNamespace purpose
  • Yaf_Loader::__clone — The __clone purpose
  • Yaf_Loader::__construct — The __construct purpose
  • Yaf_Loader::getInstance — The getInstance purpose
  • Yaf_Loader::getLibraryPath — get the library path
  • Yaf_Loader::getLocalNamespace — The getLocalNamespace purpose
  • Yaf_Loader::import — The import purpose
  • Yaf_Loader::isLocalName — The isLocalName purpose
  • Yaf_Loader::registerLocalNamespace — 注册本地类前缀
  • Yaf_Loader::setLibraryPath — 改变library路径
  • Yaf_Loader::__sleep — The __sleep purpose
  • Yaf_Loader::__wakeup — The __wakeup purpose
上一篇: 下一篇: