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 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。
我在用thinkphp框架获取数据库中数据编码并返回xml时,
发现,如果获取数据库采用了d方法,输出的xml前面多了几个空格,这却不知为何。
改用m方法空格既没有了。
望指教。
[email protected]
我在用thinkphp框架获取数据库中数据编码并返回xml时,
发现,如果获取数据库采用了d方法,输出的xml前面多了几个空格,这却不知为何。
改用m方法空格既没有了。
望指教。
[email protected]
这种情况没遇到过,不过你可以用trim之类的函数或正则表达式过滤掉这些空格。