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是指你的模型文件名)。