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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
ajax php 实现写入数据库
Sep 02 PHP
vs中通过剪切板循环来循环粘贴不同内容
Apr 30 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP SPL标准库之接口(Interface)详解
May 11 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
WordPress的主题编写中获取头部模板和底部模板
Dec 28 PHP
thinkphp框架page类与bootstrap分页(美化)
Jun 25 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 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 zend解密软件绿色版测试可用
2008/04/14 PHP
PHP之正则表达式捕获组与非捕获组(详解)
2015/07/29 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
jquery text()要注意啦
2009/10/30 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
Python正则表达式介绍
2012/08/06 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
20个常用Python运维库和模块
2018/02/12 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python中有几个关键字
2020/06/04 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
澳大利亚礼品篮网站:Macarthur Baskets
2019/10/14 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
高二学生评语大全
2014/04/25 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
规范化管理年活动总结
2014/08/29 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Java中API的使用方法详情
2022/04/06 Java/Android
使用Ajax实现进度条的绘制
2022/04/07 Javascript