简介
Yaf_Loader 类为Yaf提供了自动加载功能的全面解决方案。
在第一次使用的时候,将检索 Yaf_Application 的实例,
Yaf_Loader 实现了单利模式,并使用spl_autoload注册它自己。
通过
Yaf_Loader 加载一个类时仅仅尝试一次,如果失败了,
后面的操作将取决于yaf.use_spl_auload,
如果这个配置项为On,注意:
请保持yaf.use_spl_autoload保持关闭,除非有一些library有自己的autoload机制,并且是无法改写的。
默认情况下,Yaf_Loader 收集所有library(类定义的脚本)储存进在
php.ini(yaf.library)定义的global library directory之中。
如果你想使用 Yaf_Loader 搜索本地类(库)(定义在application.ini,
默认情况下,它是 application.directory . "/libraray"),
你需要使用
让我们来看看一些例子(假设 APPLICATION_PATH 是 application.directory):
示例 #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"
假设以下本地名称空间已被注册:
示例 #2 注册本地命名空间
public function_initLoader($dispatcher) {Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo","Bar"));
}?>
自动加载例子:
示例 #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中,你可以使用命名空间:
示例 #4 加载命名空间类
class \Foo\Bar\Dummy =>
// APPLICATION_PATH/library/Foo/Bar/Dummy.php
class \FooBar\Bar\Dummy =>
// /global_dir/FooBar/Bar/Dummy.php
你可能会注意到所有文件夹名字的首字母是大写的,你可以通过在php.ini中设置 yaf.lowcase_path = On 来将它们小写。
Yaf_Loader 也是设计来加载MVC类,响应的规则如下:
示例 #5 MVC类加载例子
Controller Classes =>
// APPLICATION_PATH/controllers/
Model Classes =>
// APPLICATION_PATH/models/
Plugin Classes =>
// APPLICATION_PATH/plugins/
Yaf 通过识别一个类的后缀(这个是默认的,你也可以通过改变配置项 yaf.name_suffix 来将它改为通过前缀识别)来决定它是否是一个MVC类:
示例 #6 MVC 类区别
Controller Classes =>
// ***Controller
Model Classes =>
// ***Model
Plugin Classes =>
// ***Plugin
some examples:
示例 #7 MVC loading example
class IndexController
// APPLICATION_PATH/controllers/Index.php
class DataModel =>
// APPLICATION_PATH/models/Data.php
class DummyPlugin =>
// APPLICATION_PATH/plugins/Dummy.php
class A_B_TestModel =>
// APPLICATION_PATH/models/A/B/Test.php
该目录将受 yaf.lowcase_path 的影响。