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
php Http_Template_IT类库进行模板替换
Mar 19 PHP
c#中的实现php中的preg_replace
Dec 21 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
PHP创建word文档的方法(平台无关)
Mar 29 PHP
orm获取关联表里的属性值
Apr 17 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 PHP
PHP中的日期时间处理利器实例(Carbon)
Jun 09 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
laravel http 自定义公共验证和响应的方法
Sep 29 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 md5下16位和32位的实现代码
2008/04/09 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
Vue函数式组件-你值得拥有
2019/05/09 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
大学生求职推荐信
2013/11/27 职场文书
大学同学聚会邀请函
2014/01/19 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
质量整改通知单
2015/04/21 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python
Python自动化实战之接口请求的实现
2022/05/30 Python