ThinkPHP 中M方法和D方法的具体区别
M方法和D方法的区别
ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类。
使用M方法
如果是如下情况,请考虑使用 M方法:
- 对数据表进行简单的 CURD 操作而无复杂的业务逻辑时
- 只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用
M方法 甚至可以简单看着就是对参数表名对应的数据表的操作:
$User = M('User');
使用D方法
如果是如下情况,请考虑使用 D方法:
- 需要使用 ThinkPHP 模型中一些高级功能如自动验证功能(create()方法中实现)、关联模型等
- 业务逻辑比较复杂,且涉及的表众多
- 将业务逻辑定义在了自定义的模型类里面(Lib/Model目录下),而想在操作中实现这些业务逻辑
另外 D方法 不支持跨项目调用,需要使用:
$User = D('User', 'Admin'); // 实例化 Admin 项目下面的 User 模型 $User = D('Admin.User'); // 启用了项目分组
提示
启用了项目分组后,Model 类并不必然对应着项目分组。多个项目组之间共有的模型类,统一放在 Model 目录下,可以直接使用D('ModelName') 实例化。而 D('User.UserInfo') 并不表示 User 一定是一个项目分组,也可以仅仅是对 Model 下文件的一个分类目录,D('User.UserInfo') 实例化的是 User 目录下的 UserInfo 模型类。
总结
M方法 和 D方法 都可以在模型类文件不存在的情况下直接使用的,但显然 M方法 更高效;但要使用模型类里面业务逻辑,就必须使用 D方法。
一个比较形象的比喻就是:M方法 就如一台刚装好操作系统的电脑,只能使用一些基本功能;而 D方法 就如在装好的系统上再安装了一些如 Office、QQ 等应用软件,功能更加强大,同时整个电脑运行速度也变慢了。
以上是对 M方法和D方法区别的一些总结,M方法 和 D方法 要根据实际情况来具体选择。
转载于:https://www.cnblogs.com/Wtingting/p/6560946.html
ThinkPHP 中M方法和D方法的具体区别相关推荐
- hibernate中get方法和load方法的根本区别
hibernate中get方法和load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 ...
- jquery中prop()方法和attr()方法
接着上一篇笔记的疑惑,找了下prop()方法和attr()方法的区别.原来query1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 大 ...
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
- Keras中predict()方法和predict_classes()方法的区别
正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...
- VBA中Activate方法和Select方法的区别
VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...
- Java中sleep()方法和wait()方法的异同点
前言 前几篇文章讲过wait()系列方法后,我们来对比看看它和sleep()方法有什么异同点.如果不了解wait()方法也没关系,文章中我会附上涉及到的文章.我们先从sleep()方法讲起,彻底搞清楚 ...
- java中paint方法和paintComponent方法的不同
/*1.由Component.java源代码中可以看见其中的paint()方法体是空的,在Container中重写了该方法,其子类Window等也重写了该方法2.由JComponent.java源代码 ...
最新文章
- springmvc二十二:annotation-driven标签
- 一款基于jQuery外观优雅带遮罩弹出层对话框
- python的爬虫功能如何实现
- 直接上手!不容错过的 Visual Studio Code 十大扩展组件
- 读《自己动手写操作系统》
- Intel汇编与程序设计第五版3.4定义数据小节
- iOS启动画面不更新的问题
- auto.js下载安装教程
- 黑客帝国1-3 1080P 35.9G 下载
- SQLMAP 命令详解
- 最新服务器处理器天梯,服务器CPU性能排行榜天梯图(双路/三路/四路)
- MIT线性代数笔记七 列空间和零空间求解 Ax=0:主变量和特解
- 重仓金融股却遭“滑铁卢”
- 2021,你值得看的华为/字节/腾讯/京东/网易/滴滴面经分享
- 上班聊天,摸鱼神器,手写一款即时通讯工具(附源码!!!)
- 地图坐标转换问题--百度地图定位偏
- SQL Server查询排序 升序 降序
- php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...
- gunicorn flask的请求流程
- 线性代数(七)二次型——正交变换法化二次型为标准形
热门文章
- java web基础1Tomcat服务器基本知识
- TRIZ系列-创新原理-23-反馈原理
- 关于爬虫异步请求心得
- 我要再接再力 学更多
- hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步(已开源)
- 我的日常工具——gdb篇
- nodejs-REPL/回调函数/事件循环
- hdu1711 KMP模板
- 【Android NDK 开发】Android NDK 下载 ( 下载指定历史版本 NDK | Android NDK r10e - 2015 年 5 月 )
- 【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )