ThinkPHP中M和D函数的区别
参考来源:http://blog.csdn.net/siren0203/archive/2010/10/29/5974415.aspx
两个有共同点..都是实例化对象用的..
但是 在使用时 两者却不一样...为什么??
先看看代码
函数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函数
function D($name = '', $app = ''){ static $_model = array(); if (empty($name)) //$name为空 作用就等同 函数M(); return new Model; if (empty($app)) //默认模块名称 在Common/convention.php中定义 =@ $app = C('DEFAULT_APP'); //如果已经存在对象 直接返回 if (isset($_model[$app . $name])) return $_model[$app . $name]; $OriClassName = $name; //如果$name参数是以 @.**.模块名 这种参数传递的话 if (strpos($name, '.')) { $array = explode('.', $name); //$name=模块名 $name = array_pop($array); $className = $name . 'Model'; //导入Model模块所在的文件 import($app . '.Model.' . implode('.', $array) . '.' . $className); } //直接导入 else { $className = $name . 'Model'; import($app . '.Model.' . $className); } //实例化对象返回 if (class_exists($className)) { $model = new $className(); } else { $model = new Model($name); } $_model[$app . $OriClassName] = $model; return $model;}
具体注释已经在代码里面了
两者对比 大家应该能看出来...
D函数实例化的是 你当前项目的Lib/Model下面的模块
如果该模块不存在的话 直接返回实例化Model的对象(意义就与M()函数相同)
而M 只返回 实例化 Model的对象..它的$name参数 作为数据库的表名来处理对数据库的操作
通俗点说,D就是实例化一个基于Model文件的Model,而M则是通过直接实例化Model方法(ThinkPHP基类)来动态的实例化一个Model对象,即使这个对应的Model文件不存在。
再通俗一点说就是:
M实例化参数是数据库的表名.
D实例化的是你自己在model文件夹下面建立的模型文件.

类和方法的概念和实例类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类的构造方法__init__():类有一个名为init()的特殊方法(构造方法),该方法在类实例化时会自动调用。实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self修饰的变量。实例化:创建一个类的实例,类的具体对象。继承:即一个派生类(derivedclass)继承基类(baseclass)的

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了关于使用think-queue来实现普通队列和延迟队列的相关内容,think-queue是thinkphp官方提供的一个消息队列服务,下面一起来看一下,希望对大家有帮助。

class是python中的一个关键字,用来定义一个类,定义类的方法:class后面加一个空格然后加类名;类名规则:首字母大写,如果多个单词用驼峰命名法,如【class Dog()】。

jQuery是一种经典的JavaScript库,被广泛应用于网页开发中,它简化了在网页上处理事件、操作DOM元素和执行动画等操作。在使用jQuery时,经常会遇到需要替换元素的class名的情况,本文将介绍一些实用的方法,以及具体的代码示例。1.使用removeClass()和addClass()方法jQuery提供了removeClass()方法用于删除

在thinkphp3.2中,可以利用define关闭调试模式,该标签用于变量和常量的定义,将入口文件中定义调试模式设为FALSE即可,语法为“define('APP_DEBUG', false);”;开启调试模式将参数值设置为true即可。

在许多中心化交易所出现问题后,越来越多的币圈投资者开始将资产转移到冷钱包中,以减少中心化交易所带来的风险。本文将介绍全球最早的冷钱包供应商Trezor,自2014年推出首款冷钱包至今,在全球多个国家销售。Trezor的产品包括2014年推出的ModelOne和2018年推出的进阶版本ModelT。下面将继续介绍这两款产品与其他冷钱包的区别。什么是Trezor冷钱包?2014年,Trezor推出了第一款冷钱包ModelOne。除了常见的BTC、ETH、USDT等币种外,该钱包还支持超过1000种其

在编写PHP代码时,使用类(Class)是一个非常常见的做法。通过使用类,我们可以将相关的功能和数据封装在一个单独的单元中,使代码更加清晰、易读和易维护。本文将详细介绍PHPClass的用法,并提供具体的代码示例,帮助读者更好地理解如何在实际项目中应用类来优化代码。1.创建和使用类在PHP中,可以使用关键字class来定义一个类,并在类中定义属性和方法。

Vue报错:无法正确使用v-bind绑定class和style,怎样解决?在Vue开发中,我们经常会用到v-bind指令来动态绑定class和style,但是有时候我们可能会遇到一些问题,如无法正确使用v-bind绑定class和style。在本篇文章中,我将为你解释这个问题的原因,并提供解决方案。首先,让我们先了解一下v-bind指令。v-bind用于将V


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Atom编辑器mac版下载
最流行的的开源编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Dreamweaver Mac版
视觉化网页开发工具
我在用thinkphp框架获取数据库中数据编码并返回xml时,
发现,如果获取数据库采用了d方法,输出的xml前面多了几个空格,这却不知为何。
改用m方法空格既没有了。
望指教。
[email protected]
我在用thinkphp框架获取数据库中数据编码并返回xml时,
发现,如果获取数据库采用了d方法,输出的xml前面多了几个空格,这却不知为何。
改用m方法空格既没有了。
望指教。
[email protected]
这种情况没遇到过,不过你可以用trim之类的函数或正则表达式过滤掉这些空格。