## 关于自动加载 目前几乎所有的主流php框架和向面对像开发的开源程序都是采用自动加载方式来实现类的自动加载。 自动加载的好处就是用时即加载,不用即不加载,这样使得php性能更加优越。 DTapi实现自动加载的目的性能考虑不是主因,主因为了适应不同的开发者不同的开发习惯,因为destoon是面向过程的编程方式,DTapi在架构时便同时兼顾一面向对像和面向过程。 如果您是一位不熟悉面向对像编程的开发者,完全可以在控制器中继续destoon的编程风格。 ## 自动加载方法 * 在控制器中使用: 类名::方法名 时系统会自动寻找符合条件的文件加载进来。 * 可自动加载的类有,当前应用的模型,扩展,框架helpers 扩展目录中的类 自动中载必须遵循以下命名规则: ### 框架扩展类自动加载方法: `说明:框架扩展指的是dtapi/helper/ 目录中的类,一个php文件即为一个扩展;` * 类文件命名规则: 类名拼音或英文加后缀 .class.php * 例: dao.class.php * 类名命名规则:与文件同名; * 例: ``` <?php namespace dtapp\demo\ext; class dao{ function test(){ echo "dtapi.com"; } } ?> ``` * 自动加载方法: 类名::方法名 * 例: ``` <?php namespace dtapp\demo; use \helpers\dao //在控制器文件头部导入类 class demo{ function index(){ dao::test(); //使用dao扩展中的test()方法 } } ?> ``` * 注意:DTapi是基于面向对像编程,所以扩展都是以封装成对像来使用。 ### 框架核心库自动加载方法 说明:框架核心方法指的是DTapi/dtapi 目录下的类,核心方法都是由DTapi官方维护和增加,其它开发者如果需要增加一些通用性强,功能强大的库可以开发成helper扩展。 * 加载示例: ``` <?php namespace dtapp\demo; use \dtapi\Db; //导入Db类 class demo{ function index(){ //使用select方法在destoon_member 表中查询 admin 这个会员的所有信息 $data = Db::table('member')->condition("username='admin'")->get_one; } } ?> ``` 提示:核心类库导入时,使用 use \dtapi\类文件名 ### 应用模型自动加载方法 说明:DTapi中的模型不是必须的,与控制器的绑定也不是自动的,需要用的时候通过自动加载方法加载 例: ``` <?php namespace dtapp\demo; use \dtapp\demo\model\index as M; //导入模型,因为模型和控制器重名的原因,php可能会警告提示,所以我们在这需要对模型进行重命名 class index{ public function index(){ $data = M::index(); //当前方式绑定的模型方法,不建议使用静态方法访问模型中的方法,除非你模型中的方法也是静态方法 print_r($data); } } ``` 提示:模型如果和控制器重名的话,需要在use时对模型进行重命名,建议大家不要与控制器重名 ##应用扩展自动加载方法 说明:应用扩展是指当前应用中 ext目录下的类,一个文件则为一个扩展。 自动加载示例: ``` <?php namespace dtapp\demo; use \dtapp\demo\ext\test; //导入test扩展 class index{ public function index(){ test::index(); //调用test扩展中index()方法 } } ?> ``` 提醒:导入扩展时使用 use \dtapp\当前应用名\ext\扩展类名 ###自动加载同作者目录下的其它应用的类 说明:和当前应用的模型,扩展加载方式是基本一样的,只需要把use 路径改成对应的应用就行了 例: ``` use \dtapp\test\model\user //加载同作者目录下的 test应用的user模型 ``` ## 新手小白不懂自动加载怎么办? 答:很简单,先use 命名空间,然后new对像 例:在控制器index.php 我要使用当前应用ext里的excel.class.php ``` //先use 这个类,use 不能在function(){ } 里面使用,得在class index { 的上面 namespace dtapp\demo; use dtapp\ext\excel; //这里use 是对的 class index{ function index(){ //注意use不能在这里面使用 $excel = new excel(); //这里new 对像 } } ``` 提醒:同一个命名空间下的类之间导入是不需要use 的,直接new 就行了。 ## 注意: 需要实现自动加载的类必须严格按照以上方法命名,详情在命名规范篇中和第一个应用都有介绍。 # 打赏 您的支持是我最大的动力哦,立即通过微信扫一扫犒劳下高飞吧! ![](images/weixin.jpg)