ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类。php
若是是以下状况,请考虑使用 M方法:java
对数据表进行简单的 CURD 操做而无复杂的业务逻辑时 只有个别的表有较为复杂的业务逻辑时,将 M方法 与实例化 CommonModel 类进行结合使用
M方法 甚至能够简单看着就是对参数表名对应的数据表的操做:数据库
$User = M('User');
若是是以下状况,请考虑使用 D方法:c#
须要使用 ThinkPHP 模型中一些高级功能如自动验证功能(create()方法中实现)、关联模型等 业务逻辑比较复杂,且涉及的表众多 将业务逻辑定义在了自定义的模型类里面(Lib/Model目录下),而想在操做中实现这些业务逻辑
另外 D方法 不支持跨项目调用,须要使用:app
$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方法 要根据实际状况来具体选择。spa
两个有共同点..都是实例化对象用的..操作系统
可是 在使用时 二者却不同...为何??code
先看看代码对象
函数M
function M($name = '', $class = 'Model') { static $_model = array(); if (!isset($_model[$name . '_' . $class])) // 默认也就是 new Model($name) $_model[$name . '_' . $class] = new $class($name); //返回实例化对象 return $_model[$name . '_' . $class]; }
$_model[$name . '_' . $class] = new $class($name);
默认也就是 new Model($name)
也就是说 M返回的是Model的对象
若是$name不为空 那么$name的意义也就是表明数据库的表名(这个之后说)
经过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即便这个对应的Model文件不存在
再来看 D方法
具体注释已经在代码里面了
二者对比 你们应该能看出来...
D函数实例化的是 你当前项目的Lib/Model下面的模块
若是该模块不存在的话 直接返回实例化Model的对象(意义就与M()函数相同)
而M 只返回 实例化 Model的对象..它的$name参数 做为数据库的表名来处理对数据库的操做
通俗点说,D就是实例化一个基于Model文件的Model,而M则是经过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即便这个对应的Model文件不存在。
再通俗一点说就是:
M实例化参数是数据库的表名.
D实例化的是你本身在model文件夹下面创建的模型文件.