## 自動加載器
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");
?>`