M方法和D方法的区别

ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类。

使用M方法

如果是如下情况,请考虑使用 M方法:

  1. 对数据表进行简单的 CURD 操作而无复杂的业务逻辑时
  2. 只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用

M方法 甚至可以简单看着就是对参数表名对应的数据表的操作:

$User = M('User'); 

使用D方法

如果是如下情况,请考虑使用 D方法:

  1. 需要使用 ThinkPHP 模型中一些高级功能如自动验证功能(create()方法中实现)、关联模型等
  2. 业务逻辑比较复杂,且涉及的表众多
  3. 将业务逻辑定义在了自定义的模型类里面(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方法的具体区别相关推荐

  1. hibernate中get方法和load方法的根本区别

    hibernate中get方法和load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 ...

  2. jquery中prop()方法和attr()方法

    接着上一篇笔记的疑惑,找了下prop()方法和attr()方法的区别.原来query1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. 大 ...

  3. python predict_对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...

  4. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  5. ExtJS中listener方法和handler方法的区别

    listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...

  6. Keras中predict()方法和predict_classes()方法的区别

    正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...

  7. VBA中Activate方法和Select方法的区别

    VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...

  8. Java中sleep()方法和wait()方法的异同点

    前言 前几篇文章讲过wait()系列方法后,我们来对比看看它和sleep()方法有什么异同点.如果不了解wait()方法也没关系,文章中我会附上涉及到的文章.我们先从sleep()方法讲起,彻底搞清楚 ...

  9. java中paint方法和paintComponent方法的不同

    /*1.由Component.java源代码中可以看见其中的paint()方法体是空的,在Container中重写了该方法,其子类Window等也重写了该方法2.由JComponent.java源代码 ...

最新文章

  1. springmvc二十二:annotation-driven标签
  2. 一款基于jQuery外观优雅带遮罩弹出层对话框
  3. python的爬虫功能如何实现
  4. 直接上手!不容错过的 Visual Studio Code 十大扩展组件
  5. 读《自己动手写操作系统》
  6. Intel汇编与程序设计第五版3.4定义数据小节
  7. iOS启动画面不更新的问题
  8. auto.js下载安装教程
  9. 黑客帝国1-3 1080P 35.9G 下载
  10. SQLMAP 命令详解
  11. 最新服务器处理器天梯,服务器CPU性能排行榜天梯图(双路/三路/四路)
  12. MIT线性代数笔记七 列空间和零空间求解 Ax=0:主变量和特解
  13. 重仓金融股却遭“滑铁卢”
  14. 2021,你值得看的华为/字节/腾讯/京东/网易/滴滴面经分享
  15. 上班聊天,摸鱼神器,手写一款即时通讯工具(附源码!!!)
  16. 地图坐标转换问题--百度地图定位偏
  17. SQL Server查询排序 升序 降序
  18. php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...
  19. gunicorn flask的请求流程
  20. 线性代数(七)二次型——正交变换法化二次型为标准形

热门文章

  1. java web基础1Tomcat服务器基本知识
  2. TRIZ系列-创新原理-23-反馈原理
  3. 关于爬虫异步请求心得
  4. 我要再接再力 学更多
  5. hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步(已开源)
  6. 我的日常工具——gdb篇
  7. nodejs-REPL/回调函数/事件循环
  8. hdu1711 KMP模板
  9. 【Android NDK 开发】Android NDK 下载 ( 下载指定历史版本 NDK | Android NDK r10e - 2015 年 5 月 )
  10. 【错误记录】Groovy 函数参数动态类型报错 ( Caught: groovy.lang.MissingMethodException: No signature of method )