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+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
PHP 字符串分割和比较
Oct 06 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
php cli模式下获取参数的方法
May 05 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
用php实现分页效果的示例代码
Dec 10 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
在Python中表示一个对象的方法
2019/06/25 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Python标准库itertools的使用方法
2020/01/17 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
银行求职自荐信范文
2015/03/04 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL