## 自动加载器
Yaf在自启动的时候, 会通过SPL注册一个自己的Autoloader, 出于性能的考虑, 对于框架相关的MVC类, Yaf Autoloader只以目录映射的方式尝试一次.
#### Yaf目录映射规则
| 类型 | 后缀 | 映射路径 |
| -- | -- | -- |
| 控制器 | Controller | 默认模块下为{项目路径}/controllers/, 否则为{项目路径}/modules/{模块名}/controllers/ |
| 数据模型 | Model | {项目路径}/models/ |
| 插件 | Plugin | {项目路径}/plugins/ |
#### 一个简单的自我理解
`<?php
class IndexController extends Yaf_Controller_Abstract {
public function indexAction() {//默认Action
$mod = new TserModel(); //自动加载model下面的test.php文件
$mod->query(); //调用TestModel里的query方法
$user = new UserPlugin(); //自动加载plugins下面的user.php文件
$this->getView()->assign("title", "Hello Yaf");
$this->getView()->assign("content", "Hello Yaf Content");
}
`
## 类的加载规则
而类的加载规则, 都是一样的: Yaf规定类名中必须包含路径信息, 也就是以下划线"_"分割的目录信息. Yaf将依照类名中的目录信息, 完成自动加载. 如下的例子, 在没有申明本地类的情况下:
`
public function indexAction() {
$upload = new upload_aliyun(); //这个就会按下划线分割目录来寻找文件,所以他会寻找 \library\upload\aliyun.php
}`
先这么简单理解,还有一个registerLocalNamespace的内容,后续再来说一说,怕混了。
### 手动载入
Yaf_Loader::import
导入一个PHP文件, 因为Yaf_Loader::import只是专注于一次包含, 所以要比传统的require_once性能好一些
示例:
`<?php
//绝对路径
Yaf_Loader::import("/usr/local/foo.php);
//相对路径, 会在APPLICATION_PATH."/library"下加载
Yaf_loader::import("plugins/User.php");
?>`