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 文件上传系统手记
Oct 26 PHP
PHP5中使用DOM控制XML实现代码
May 07 PHP
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
Feb 04 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 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
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
jquery悬浮提示框完整实例
2016/01/13 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
vue.js语法及常用指令
2017/10/29 Javascript
Nginx 配置多站点vhost 的方法
2018/01/07 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
jquery实现选项卡切换代码实例
2019/05/14 jQuery
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
[02:41]DOTA2亚洲邀请赛小组赛第三日 赛事回顾
2015/02/01 DOTA
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python爬取附近餐馆信息代码示例
2017/12/09 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
详解Python字典的操作
2019/03/04 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
Django-imagekit的使用详解
2020/07/06 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
个人能力自我鉴赏
2014/01/25 职场文书
安全生产月标语
2014/10/07 职场文书
合同审查法律意见书
2015/06/04 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android