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 相关文章推荐
main.php
Dec 09 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
PHP会话控制:Session与Cookie详解
Sep 27 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
Sep 14 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
深入分析PHP设计模式
Jun 15 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导入导出CSV文件
2014/11/03 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
树结构之JavaScript
2017/01/24 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
Python程序语言快速上手教程
2012/07/18 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python中reader的next用法
2018/07/24 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Pandas的Apply函数具体使用
2020/07/21 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
如何写一份好的自荐信
2014/01/02 职场文书
初中体育教学反思
2014/01/14 职场文书
安全教育实施方案
2014/03/02 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python