当前位置:  编程技术>php

ThinkPHP中M方法与D方法有什么区别

    来源: 互联网  发布时间:2014-08-30

    本文导语:  ThinkPHP中M方法与D方法有什么区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类。 使用M方法 如果是如下情况,请考虑使用 M方法: 对数据表...

ThinkPHP中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方法 要根据实际情况来具体选择。

D()和M()方法的区别:
D和M的区别主要在于
M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现
而D方法必须有创建模型类。
我们可以用下面两种方法去创建一个数据表的映射对象
第一种:$Test = D(‘Test’)
第二种:$Test = new Model(‘Test’)
虽然这两种都可以对数据进行select,insert,delete,udpate操作,在
数据验证上有很大的不同,
用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);
如果用第二种就没有了这个数据验证功能,需要手动验证。
总结如下:
D函数实例化的是你当前项目的Lib/Model下面的模块。
如果该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。
而M只返回,实例化Model的对象。它的$name参数作为数据库的表名来处理对数据库的操作。

通俗点说:
D就是实例化一个基于Model文件的Model。
M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在。
再通俗一点说:
M实例化参数是数据库的表名。
D实例化的是你自己在Model文件夹下面建立的模型文件。
D就是在你没有定义模型时,系统自动帮你定义一个模型,这样你才进行简单的数据输入或者输出。
每一个Action文件都应该对应Model文件的,如果你定义了Model的话,
如:$Form = D(“User”)就可以改成$Form = new  UserModel();(User是指你的模型文件名)。

您可能感兴趣的文章:
  • ThinkPHP之M方法实例教程
  • ThinkPHP之A方法实例教程
  • ThinkPHP之N方法实例教程
  • ThinkPHP中R方法实例教程
  • ThinkPHP中L方法实例教程

    
 
 

您可能感兴趣的文章:

  • ThinkPHP CURD方法之order方法教程详解
  • ThinkPHP之N方法实例教程
  • ThinkPHP CURD方法中limit方法教程详解
  • ThinkPHP CURD方法之order方法详解
  • ThinkPHP CURD方法之table方法教程详解
  • thinkphp分页保持搜索状态实现方法
  • ThinkPHP CURD方法之limit方法详解
  • ThinkPHP让分页保持搜索状态的方法
  • ThinkPHP CURD方法中page方法教程详解
  • ThinkPHP的模版中调用session数据的方法
  • ThinkPHP查询中的魔术方法简述
  • ThinkPHP之A方法实例教程
  • ThinkPHP模板IF标签用法详解 iis7站长之家
  • 浅析ThinkPHP中execute和query方法的区别
  • ThinkPHP框架实现session跨域问题的解决方法
  • ThinkPHP中自定义目录结构的设置方法
  • ThinkPHP模板中判断volist循环的最后一条记录的验证方法
  • ThinkPHP中L方法实例教程
  • 采用ThinkPHP中F方法实现快速缓存实例
  • ThinkPHP CURD方法之table方法详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ThinkPHP学习笔记(一)ThinkPHP部署
  • ThinkPHP标签怎么制作?thinkphp标签制作实例教程
  • ThinkPHP3.1新特性之对分组支持的改进与完善概述
  • 轻量级PHP开发框架 ThinkPHP
  • 模仿 thinkphp 的 nodejs MVC 框架 Nstorm
  • ThinkPHP中的关联模型注意点
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
  • ThinkPHP实现事务回滚示例代码
  • Thinkphp模板中截取字符串函数简介
  • ThinkPHP命令行工具 Tptool
  • ThinkPHP之foreach标签使用概述
  • ThinkPHP中URL路径访问与模块控制器之间的关系
  • ThinkPHP实现批量删除数据的代码实例
  • ThinkPHP3.1新特性之内容解析输出详解
  • Thinkphp中import的几个用法详细介绍
  • ThinkPHP模板判断输出Empty标签用法详解
  • ThinkPHP模板判断输出Present标签用法详解
  • Thinkphp实现MySQL读写分离操作示例
  • ThinkPHP模板IF标签用法详解
  • thinkphp3查询mssql数据库乱码解决方法分享


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3