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连接access数据库
Mar 27 PHP
php 数组的一个悲剧?
May 11 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
Jun 02 PHP
php权重计算方法代码分享
Jan 09 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
laravel orm 关联条件查询代码
Oct 21 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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 XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
toggle()隐藏问题的解决方法
2014/02/17 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
python os用法总结
2018/06/08 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python能做什么 python的含义
2019/10/12 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
优纳科技软件测试面试题
2012/05/15 面试题
自动化系在校本科生求职信
2013/10/23 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
军训考核自我鉴定
2014/02/13 职场文书
校庆筹备方案
2014/03/30 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
感恩母亲节活动总结
2015/02/10 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
解析Java异步之call future
2021/06/14 Java/Android
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏