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 相关文章推荐
杏林同学录(五)
Oct 09 PHP
关于时间计算的结总
Dec 06 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
May 12 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
php 中奖概率算法实现代码
Jan 25 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
Yii2选项卡的简单使用
May 26 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
php的无刷新操作实现方法分析
Feb 28 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 ajax 静态分页过程形式
2011/09/02 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
JavaScript 变量基础知识
2009/11/07 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
关于vue面试题汇总
2018/03/20 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
2019/05/07 Javascript
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python字节单位转换实例
2019/12/05 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
Python Map 函数的使用
2020/08/28 Python
Python编写单元测试代码实例
2020/09/10 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
详解Scrapy Redis入门实战
2020/11/18 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
使用HTML5和CSS3制作一个模态框的示例
2018/03/07 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
医院实习接收函
2014/01/12 职场文书
教师个人读书活动总结
2014/07/08 职场文书
承诺保证书格式
2015/02/28 职场文书
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL