11.3. The Yaf_Loader class

简介

Yaf_Loader类为Yaf提供了自动加载功能, 它根据类名中包含的路径信息实现类的定位和自动加载.

Yaf_Loader也提供了对传统的require_once的替代方案, 相比传统的require_once, 因为舍弃对require的支持, 所以性能能有一丁点小优势.

在PHP5.3之后, 打开yaf.use_namespace的情况下, 也可以使用 Yaf\Loader.

 
    final 

    Yaf_Loader
    {
protected static Yaf_Loader _instance ;
protected string _library_directory ;
protected string _global_library_directory ;
protected string _local_ns ;
public static Yaf_Loader getInstance ( string $local_library_directory = NULL ,
string $global_library_directory = NULL );

public Yaf_Loader registerLocalNamespace ( mixed $namespace );
public boolean getLocalNamespace ( void );
public boolean clearLocalNamespace ( void );
public boolean isLocalName ( string $class_name );
public static boolean import ( string $file_name );
public boolean autoload ( string $class_name );
}
属性说明
_instance

Yaf_Loader实现了单利模式, 一般的它由Yaf_Application负责初始化. 此属性保存当前实例

_library_directory

本地(自身)类加载路径, 一般的, 属性的值来自配置文件中的ap.library

_global_library_directory

全局类加载路径, 一般的, 属性的值来自php.ini中的ap.library

_local_ns

本地类的类名前缀, 此属性通过Yaf_Loader::registerLocalNamespace来添加新的值

命名空间类的查找

对于命名空间形式的类, 命名空间分隔符同样会被转换为目录分隔符, 并且根据第一级命名空间名称决定在哪个类库目录中查找:


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

class \FooBar\Bar\Dummy =>
   // /global_dir/FooBar/Bar/Dummy.php

第一级命名空间名称已经通过registerLocalNamespace注册为本地类前缀的, 在本地类库目录中查找, 否则在全局类库目录(即php.ini中的ap.library)中查找.