1. 程式人生 > >thinkphp中的M方法和D方法

thinkphp中的M方法和D方法

ThinkPHP 中M方法和D方法都用於例項化一個模型類,M方法 用於高效例項化一個基礎模型類,而 D方法 用於例項化一個使用者定義模型類。

使用M方法

如果是如下情況,請考慮使用 M方法:
1.對資料表進行簡單的 CURD 操作而無複雜的業務邏輯時
2.只有個別的表有較為複雜的業務邏輯時,將 M方法 與例項化 CommonModel 類進行結合使用

M方法 甚至可以簡單看著就是對引數表名對應的資料表的操作:

$User = M('User');

使用D方法

如果是如下情況,請考慮使用 D方法:

1.需要使用 ThinkPHP 模型中一些高階功能如自動驗證功能(create()方法中實現)、關聯模型等
2.業務邏輯比較複雜,且涉及的表眾多

3.將業務邏輯定義在了自定義的模型類裡面(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方法 要根據實際情況來具體選擇。

相關推薦

thinkphpM方法D方法

ThinkPHP 中M方法和D方法都用於例項化一個模型類,M方法 用於高效例項化一個基礎模型類,而 D方法 用於例項化一個使用者定義模型類。使用M方法如果是如下情況,請考慮使用 M方法:1.對資料表進行簡單的 CURD 操作而無複雜的業務邏輯時2.只有個別的表有較為複雜的業

jqueryprop()方法attr()方法的區別淺析

clas ttr over dex idt pro query selected accesskey jquery1.6中新加了一個方法prop(),一直沒用過它,官方解釋只有一句話:獲取在匹配的元素集中的第一個元素的屬性值。 大家都知道有的瀏覽器只要寫disabled,c

JS的toString()valueOf()方法

object div 國標 erro 默認 時間 ror 方法 中國 1、toString()方法:主要用於Array、Boolean、Date、Error、Function、Number等對象轉化為字符串形式。日期類的toString()方法返回一個可讀的日期和字符串。

Java 異常的Exception e的egetMessage()toString()方法的區別

catch area color sys 區別 ssa clas testin tin Exception e中e的getMessage()和toString()方法的區別: 示例代碼1: public class TestInfo { private stati

Hibernateget方法load方法的區別

pub 機制 否則 on() color 檢索 不存在 bsp 數據庫查詢 1.從返回結果上對比: load方式檢索不到的話會拋出org.hibernate.ObjectNotFoundException異常; get方法檢索不到的話會返回null; 2.從檢索執行機制上對

js的call()apply()方法

-m spa script apply() obj cli nbsp val glob 1.call() 語法:obj1.call(obj2[,param1,param2,...])定義:用obj2對象來代替obj1,調用obj1的方法。即將obj1應用到obj2上。說明:

jqueryprop()方法attr()方法的區別

nbsp editable isa dex rop 效應 元素 body att jquery1.6中新加了一個方法prop(),一直沒用過它,官方解釋只有一句話:獲取在匹配的元素集中的第一個元素的屬性值。 大家都知道有的瀏覽器只要寫disabled,checked就可以了

Java Thread,run方法start方法的區別

bsp 區別 繼續 時間片 ron thread類 等待 nbsp art 兩種方法的區別: 1.start方法 用 start方法來啟動線程,是真正實現了多線程, 通過調用Thread類的start()方法來啟動一個線程,這時此線程處於就緒

Java對域靜態方法的訪問不具有多態性

ext 轉型 highlight .get 判斷 fin color icm true 1.將方法調用同方法主體關聯起來被稱為 2.編譯期綁定(靜態)是在程序編譯階段就確定了引用對象的類型 3.運行期綁定(動態綁定)是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調

JS的call()apply()方法區別

prototype 理解 ace attach bdb .html closed mil solid 如 果沒接觸過動態語言,以編譯型語言的思維方式去理解javaScript將會有種神奇而怪異的感覺,因為意識上往往不可能的事偏偏就發生了,甚至覺得不可 理喻.如果在學Java

Python的分片索引方法

python分片和索引本章淺寫 字符串的分片 和索引分片分片就是給定義的字符串中分離出部分內容字符串的分片和索引取第5位字符的值為e註意 給出一個字符串,可輸出任意一個字符,也可從後往前取,是從-1開始的負數; string[0]代表第一個字符,string[-1]為最後一個字符,空格也算一個字符; aa =

PHP的__call__callStatic方法(未看完)

def 不可見 重載方法 varchar baidu value dso argument dom 如何防止調用不存在的方法而出錯,使用__call魔術重載方法. __call方法原型如下: mixed __call(string $name,array $argume

InputStream通過markreset方法重復利用緩存

輸出 string sys 都是 實現 源碼 常用 ges 不支持 通過緩存InputStream可重復利用一個InputStream,但是要緩存一整個InputStream內存壓力可能是比較大的。如果第一次讀取InputStream是用來判斷文件流類型,文件編碼等

理解Java的hashCodeequals 方法

err array size tex nat 什麽 map 交流群 培訓 在Java裏面所有的類都直接或者間接的繼承了java.lang.Object類,Object類裏面提供了11個方法,如下: Java代碼 ```` 1,clone() 2,equals(Obje

urllib模塊parse函數的urlencodequote_plus方法

生成 變化 嘗試 appid 微信 notify 固定 param reat 本來只是向看一下quote_plus的作用,然後發現urlencode方法也是很方便的一個組合字符串的方法首先是介紹一下urlencode,他是將一些傳入的元素使用&串聯起來,效果如下:

LinQSkip()方法Take()方法的使用

Skip() Take()其結果是: LinQ中Skip()方法和Take()方法的使用

Python的實例方法、類方法、靜態方法普通方法

turn 屬性和方法 靜態方法 一個 def col == pre 類屬性  為了辨析它們的差別,寫了如下代碼:  1 class C: 2 3 def self_method(self, a): 4 return a 5 6

js的filter方法map方法

filter map 方法 總結filter方法是對數據中的元素進行過濾,也就是說是不能修改原數組中的數據,只能讀取原數組中的數據,callback需要返回布爾值為true的時候,對應的元素留下來,為false的時候,對應的元素過濾掉filter方法的使用:對應的結果:如果我們嘗試對原數組中的元素進行修改,會

Javascriptcall()方法apply()方法的作用與區別

形式 時速 有效 let 調用函數 ply lane pan arguments ECMAScript規範所有函數都包含兩個非繼承的方法,分別為call()和apply(),這兩個函數都是在特定的作用域中調用函數,能改變函數的作用域,實際上是改變函數體內“t

JAVA關於set()get()方法的理解及使用

當我 一般來說 怎麽 而是 知識 了解 構造 set 今後 https://www.cnblogs.com/fly-sky-han/p/6564439.html 我們先來看看set和get這兩個詞的表面意思,set是設置的意思,而get是獲取的意思,顧名思義,這兩個方法是對