ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 自动加载器 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"); ?>`