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个人网站架设连环讲(二)
Oct 09 PHP
PHP简单系统查询模块代码打包下载
Jun 07 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
php实现分页工具类分享
Jan 09 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
php接口技术实例详解
Dec 07 PHP
yii框架搜索分页modle写法
Dec 19 PHP
一个非常实用的php文件上传类
Jul 04 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
laravel 数据验证规则详解
2019/10/23 PHP
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
机电一体化求职信
2014/03/10 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
Django中session进行权限管理的使用
2021/07/09 Python
Python中的变量与常量
2021/11/11 Python