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 相关文章推荐
php 特殊字符处理函数
Sep 05 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
fgetcvs在linux的问题
Jan 15 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
WordPress中使主题支持小工具以及添加插件启用函数
Dec 22 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 PHP
PHP的介绍以及优势详细分析
Sep 05 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
强制设为首页代码
2006/06/19 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
js轮播图代码分享
2016/07/14 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
JS作用域深度解析
2016/12/29 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
JS中‘hello’与new String(‘hello’)引出的问题详解
2018/08/14 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
flask 实现token机制的示例代码
2019/11/07 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
舞蹈教师自荐信
2014/01/27 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年六一儿童节演讲稿
2015/03/19 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
不同意离婚答辩状
2015/05/22 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers