ThinkPHP3.1之D方法实例详解


Posted in PHP onJune 20, 2014

D方法应该是用的比较多的方法了,用于实例化自定义模型类,是ThinkPHP框架对Model类实例化的一种封装,并实现了单例模式,支持跨项目和分组调用,调用格式如下:

D('[项目://][分组/]模型','模型层名称')

方法的返回值是实例化的模型对象。

D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会实例化Model基类,同时对于已实例化过的模型,不会重复去实例化。

D方法最常用的用法就是实例化当前项目的某个自定义模型,例如:

// 实例化User模型
$User = D('User');

会导入当前项目下面的Lib/Model/UserModel.class.php文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效:

import('@.Model.UserModel');
$User = new UserModel();

但是如果使用D方法的话,如果这个UserModel类不存在,则会自动调用

new Model('User');

并且第二次调用的时候无需再次实例化,可以减少一定的对象实例化开销。

D方法可以支持跨分组和项目实例化模型,例如:

//实例化Admin项目的User模型
D('Admin://User')
 //实例化Admin分组的User模型
D('Admin/User')

注意:要实现跨项目调用模型的话,必须确保两个项目的目录结构是并列的。

ThinkPHP自3.1版本开始,由于增加了分层模型的支持,所以D方法也可以实例化其他的模型,例如:

// 实例化UserService类
$User = D('User','Service');
 // 实例化UserLogic类
$User = D('User','Logic');

而D('User','Service');会导入Lib/Service/UserService.class.php,并实例化,等效于下面的代码:

import('@.Service.UserService');
$User = new UserSerivce();
PHP 相关文章推荐
pdo中使用参数化查询sql
Aug 11 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
PHP多态代码实例
Jun 26 PHP
PHP 错误处理机制
Jul 06 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
PHP使用递归按层级查找数据的方法
Nov 10 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
php写的AES加密解密类分享
Jun 20 #PHP
PHP提交表单失败后如何保留已经填写的信息
Jun 20 #PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 #PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 #PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 #PHP
PHP扩展CURL的用法详解
Jun 20 #PHP
教你如何解密 “ PHP 神盾解密工具 ”
Jun 20 #PHP
You might like
PHP 网页过期时间的控制代码
2009/06/29 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
jQuery 选择器理解
2010/03/16 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
javascript中数组和字符串的方法对比
2016/07/20 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
javaScript基础详解
2017/01/19 Javascript
RequireJs的使用详解
2017/02/19 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
python线程池threadpool实现篇
2018/04/27 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
Python中bisect的用法及示例详解
2020/07/20 Python
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
专科应届生求职信
2013/11/24 职场文书
业务部经理岗位职责
2014/01/04 职场文书
生产部统计员岗位职责
2014/01/05 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
计算机网络专业求职信
2014/06/05 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle