`

ThinkPHP中M方法与D方法区别

阅读更多

【前言】

      本文总结下ThinkPHP中M方法与D方法区别,以下均为个人见解。如有误解请指正

 

【主体】

(一)个人见解:

       M()方法参数可选,有参数时表示实例化父类模型的同时关联上参数对应的数据表;若不传参,则表示实例化父类模型

      D()方法分两种情况,有参数时表示实例化自定义模型,没有参数时表示实例化父类模型

      注意:一般的CURD操作,用M方法实例化父类模型即可。除非父类模型的需求满足不了开发,需要自定义模型。例如附件的表单在提交时分两种

     ①附件的保存入库$_FILES获取,具体过程写到模型里;

     ②普通数据的保存操作,在控制器即可完成

(二)官方手册:

      两者共同点都是实例化模型的,而两者不同点呢?一起来看一下:

(1)D方法

      $User = D('User');括号中的参数User,对应的模型类文件的 \Home\Model\UserModel.class.php(我们假设当前模块为Home),如果参数是‘UserType’,那么对应的模型类文件的 \Home\Model\UserTypeModel.class.php,也就是说D方法的参数就是模型的名称,并且和模型类的大小写定义是一致的。

(2)M方法

      $User = M('User'); 是和 $User = new \Think\Model('User'); 等效的;也就是说,M方法实例化的时候,默认情况下是直接实例化系统的\Think\Model类,如果我们希望实例化其他的公共模型类的话,可以使用如下方法:

$User = M('\Home\CommenModel:User','think_','db_config');(我们假设表前缀为think_)

(3)总结

        我们在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法。

        另外,想要使用ThinkPHP中的自动验证,自动完成功能,就需要使用D方法。

        其实说白了,M方法实例化时候的参数就是你数据库的表名,而D方法实例化的是你在Model文件夹下写的Model类,当然想要自动验证,自动完成,使用D方法。

 

 

 

 

【分享】

      最后分享下他人的见解

D()和M()方法的区别:

D和M的区别主要在于

M方法不需要创建模型类文件,M方法不会读取模型类,所以默认情况下自动验证是无效的,但是可以通过动态赋值的方式实现

 

而D方法必须有创建模型类。

我们可以用下面两种方法去创建一个数据表的映射对象

第一种:$Test = D(‘Test’)

第二种:$Test = new Model(‘Test’)

 

虽然这两种都可以对数据进行select,insert,delete,udpate操作,在数据验证上有很大的不同,

用第一种方式实例一个模型就会有数据检查功能,如果 title 没有填写的话就会提示 “请输入标题” (这个是tp提供的一个自动验证功能,当然也需要在相应的model中定义好验证条件);

如果用第二种就没有了这个数据验证功能,需要手动验证。

总结如下:

(1)D函数实例化的是你当前项目的Lib/Model下面的模块。如果该模块不存在的话,直接返回实例化Model的对象(意义就与M()函数相同)。

(2)M只返回,实例化Model的对象。它的$name参数作为数据库的表名来处理对数据库的操作。

 

(1)通俗点说:

D就是实例化一个基于Model文件的Model。

M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在。

(2)再通俗一点说:

M实例化参数是数据库的表名。

D实例化的是你自己在Model文件夹下面建立的模型文件。

D就是在你没有定义模型的时候,系统自动帮你定义一个模型,这样你才进行简单的数据输入或者输出。

每一个Action文件都应该对应Model文件的,如果你定义了Model的话,

如:$Form = D(“User”)就可以改成$Form = new  UserModel();(User是指你的模型文件名)。

分享到:
评论

相关推荐

    Thinkphp框架中D方法与M方法的区别

    在ThinkPHP框架中,D方法和M方法是两种不同的模型实例化方式,它们的主要区别在于模型文件的使用和数据验证的处理。 D方法(Data方法)是ThinkPHP中用于实例化模型的一个内置函数,它会尝试查找当前项目下`Lib/...

    ThinkPHP之M方法实例详解

    M方法用于实例化一个基础模型类,和D方法的区别在于: 1、不需要自定义模型类,减少IO加载,性能较好; 2、实例化后只能调用基础模型类(默认是Model类)中的方法; 3、可以在实例化的时候指定表前缀、数据库和...

    ThinkPHP函数详解之M方法和R方法

    在ThinkPHP框架中,M方法和R方法是两个非常重要的函数,分别用于模型的实例化和控制器操作方法的调用。下面,我们将详细介绍这两个方法的使用场景、功能特点以及具体用法。 首先来看M方法。在ThinkPHP框架中,M方法...

    解析thinkphp中的M()与D()方法的区别

    在ThinkPHP框架中,理解M()与D()方法的区别对于合理设计项目结构、编写高效代码、以及保持代码的可维护性具有重要意义。开发者应该根据实际的业务需求和数据操作场景,合理选择使用M()方法还是D()方法。

    ThinkPHP与PHPExcel冲突解决方法

    为了解决这一问题,需要在调用ThinkPHP的M方法(用于加载Model)或D方法(用于加载辅助函数)之前,重新注册ThinkPHP的自动装载类。 具体操作步骤如下: 1. 下载PHPExcel的源码包,并将其放置于ThinkPHP框架的...

    ThinkPHP中Full Calendar的使用

    在ThinkPHP框架中,我们可以利用其MVC(模型-视图-控制器)结构,将Full Calendar与数据库中的事件数据进行绑定。 首先,你需要在项目中引入Full Calendar的CSS和JavaScript文件。这通常在HTML头部通过`<link>`和`...

    基于thinkphp框架的定时器(定时执行任务)

    本篇将详细介绍如何在ThinkPHP中设置和使用定时器来定时执行任务。 一、定时任务的概念与作用 定时任务,也称为Cron Job,在服务器环境中常用于定期执行某些脚本或程序,以实现自动化工作流程。ThinkPHP中的定时...

    在ThinkPHP中调用PHPExcel的问题解决方案

    然而,在实际操作过程中可能会遇到一个问题:虽然能够成功地从Excel文件中读取出所有数据,但在尝试进行下一步操作(如D模型处理、M模型操作或调用模板)时会出现错误。 #### 二、解决方案步骤 为了解决上述问题,...

    thinkphp3.2 增删查改

    《ThinkPHP3.2框架中的增删查改与实践应用》 ThinkPHP3.2作为国内广泛应用的PHP框架,以其简洁、高效的特性深受开发者喜爱。本文将深入探讨该框架在数据库操作中的核心功能——增、删、查、改(CRUD),并结合实际...

    thinkphp3.1.2学习笔记

    1. **自动识别主键更新**:使用`D()`函数创建数据对象并调用`create()`方法处理表单数据,然后调用`save()`方法更新。如果数据验证失败,`getError()`方法会返回错误信息。 2. **正常赋值更新**:可以通过直接赋值给...

    ThinkPHP的L方法使用简介

    ThinkPHP框架提供了许多类似的单字母快捷方法,如U、D、M、I、C、G、N、A、R和F等,它们在不同的场景下有着不同的用途。了解并熟练运用这些方法,可以极大地提高开发效率和代码质量。例如,U方法用于生成URL,D方法...

    thinkphp phpexcel

    8. **标签“tp表格导出”**:这表明重点在于ThinkPHP框架中的数据导出功能,因此在实际应用中,你需要结合ThinkPHP的MVC结构,将上述代码与模型、视图和控制器结合起来,以处理用户的请求并返回Excel文件。...

    thinkphp 开发实例

    - 如果模型中有自定义的方法,则可以通过`D()`函数来实例化,例如:`$model = D('News');`。 - **路由设置**: - ThinkPHP支持灵活的URL路由规则,URL结构通常为`http://服务器地址/项目地址/模块名称/操作名称`...

    Thinkphp3.2文件上传

    - **控制器处理**:在控制器中创建处理文件上传的方法,使用`M()`或`D()`实例化模型,调用模型中的`upload()`方法处理上传。`upload()`会自动处理上传错误,并返回成功上传文件的信息。 - **模型方法**:在模型中...

    ThinkPHP3.2.1知识点

    首先,M和D方法是ThinkPHP框架中用于实例化模型的两种不同方式。 M方法提供了一种快速访问数据模型的方法,它的性能比使用D方法要高,因为它不需要加载具体的模型类。M方法直接实例化数据模型的父类,适用于那些...

    Thinkphp 常用代码以及设置

    文件与图片上传是Web应用中常见功能之一。ThinkPHP框架提供了简洁高效的API来处理这类需求。 - **在模板中的设置**: - 首先,在HTML表单中定义一个`<form>`标签,并设置其`method`属性为`post`,同时指定`enctype...

    thinkphp 字母函数详解T/I/N/D/M/A/R/U

    在ThinkPHP中,字母函数是一组简短的封装,用于简化代码编写和提高开发效率。本文将对以下字母函数进行详细解析:T、I、N、D、M、A、R、U。 1. T(模板资源定位) - T函数用于获取模板文件路径,支持模块、主题、...

Global site tag (gtag.js) - Google Analytics