tp3.2 D 和 M 的区别
ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类。
使用M方法
如果是如下情况,请考虑使用 M方法:
对数据表进行简单的 CURD 操作而无复杂的业务逻辑时
只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用
M方法 甚至可以简单看着就是对参数表名对应的数据表的操作:
$User = M('User');
使用D方法
如果是如下情况,请考虑使用 D方法:
需要使用 ThinkPHP 模型中一些高级功能如自动验证功能(create()方法中实现)、关联模型等
业务逻辑比较复杂,且涉及的表众多
将业务逻辑定义在了自定义的模型类里面(Library/Model目录下),而想在操作中实现这些业务逻辑
另外 D方法 不支持跨项目调用,需要使用:
// 实例化 Admin 项目下面的 User 模型 $User = D('Admin.User');
// 启用了项目分组
$User = D('User', 'Admin');
提示:
启用了项目分组后,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方法 要根据实际情况来具体选择
tp3.2 D 和 M 的区别的更多相关文章
- tp3.x和tp 5的区别
由于TP5.0是一个全新的颠覆重构版本,所以现在面试很多面试官喜欢问TP3.2和TP5之间的区别,那他们之间到底有哪些区别呢?一.目录 TP5目录 二.需要摒弃的 3.X 旧思想 模型的变动 ...
- TP3.1 中URL和APP区别
1.__URL__指当前模块地址,就是当前的action的地址.(每个__action都是一个模块) eg:当前打开config.html,那么config.html里边的__URL__/sav ...
- 【TP3.2与TP5.0区别】
Tp3.2 和 Tp5.0之间的区别 5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正 ...
- tp5.0和tp3.2中前台模板IF标签和FOREACH的区别
IF标签 tp3.2 <if condition="($name eq 1) OR ($name gt 100) "> value1 <elseif condit ...
- Tp3.2 和 Tp5.0之间的区别
5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...
- TP5和TP3.2的区别
1.控制器输出 return $this->fetch("index/hello"); $this->display 单字母函数去掉了 如:M() D() U() S( ...
- TP5和TP3.2的使用区别
模板标签不一样: TP5 可在配置文件中自行定义自己喜欢的标签 TP5 使用双标签 如:{foreach} {/foreach} TP3 : <> TP5 :{} 调用数据表方式: M( ...
- tp5.0和tp3.2的区别
1. 控制器输出return $this->fetch(); ----5$this->display(); ----3.2 单字母函数去掉了 如:M() D() U() S() C() 3 ...
- 【TP3.2】详解_initialize() 和 __construct() 的区别和联系
1.假设 一个AdminController.class.php 集成至 \Think\Controller 类, 我们来看看Controller.class.php的构造方法源码: /** * 架构 ...
随机推荐
- npm安装material-design-icons总是失败
项目中使用npm或者cnpm安装material-design-icons总是失败 解决办法: 1.自己上github下载后拷贝到项目node_modules目录下 2.还有npm安装老出问题,npm ...
- 常用的lamp环境以及一些依赖包的安装
- css--父元素塌陷
当父元素内都是漂浮元素时,会造成父高度塌陷的问题.(因为等同于父元素内容为空,所以长,宽都等于空) 我们想要的页面结构是: <!DOCTYPE html> <html lang=&q ...
- 关于WinSock编程的多线程控制
1引言Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Microsoft Windows下网络编程接口.它不仅包含了人们所熟悉 ...
- python修炼第四天
今天换了师傅.江湖人称景女神^o^. 女师傅讲的比较细,原理的比较多.初学者来说有些难.但是基本功是必须要打牢的.努力! 迭代器 迭代器,迭代的工具1 什么是迭代,指的是一个重复的过程,每一次重复称为 ...
- 白鹭wing的自动编译
1.lunch.json文件中的"preLaunchTask":"build",注释掉. 2.安装node-v6.11.2-x64.msi 3.安装tsc 命令 ...
- C语言作业(心理魔术)
#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include &q ...
- react-native 安装的时候遇到的问题
JAVA JDK必须要版本8以上(卡了我好大一会,不要忘了环境变量换成8的路径) 这个报错是因为我的版本没升级? 总之解决方法如下 给升级下就好啦~ 然后出现个这么个问题,是因为我用的测试手机是红米 ...
- WebApi--------找到了与该请求匹配的多个操作问题解决
错误信息: {"Message": "出现错误.","ExceptionMessage": "找到了与该请求匹配的多个操作: \r ...
- [模板] 树状数组 (C++ class)
闲来无事(其实是打了两三道树状数组题),写了个树状数组模板…… /* Author: hotwords */ template<typename tp> class BinTree { p ...