在thinkphp中,D方法可以傳回實例化的模型物件。 D方法用於實例化自訂模型類,是ThinkPHP框架對Model類實例化的一種封裝,語法“D('[項目://][分組/]模型','模型層名稱')”,傳回值為實例化的模型物件。
本教學操作環境:Windows7系統、thinkphp v5.1版、Dell G3電腦。
D方法應該是用的比較多的方法了,用於實例化自定義模型類,是ThinkPHP框架對Model類實例化的一種封裝,並實現了單例模式,支援跨項目和分組調用,調用格式如下:
D('[项目://][分组/]模型','模型层名称')
D方法的返回值是實例化的模型物件。
D方法可以自動偵測模型類,如果存在自訂的模型類,則實例化自訂模型類,如果不存在,則會實例化Model基類,同時對於已實例化過的模型,不會重複去實例化。
D方法最常用的用法就是實例化目前專案的某個自訂模型,例如:
// 实例化User模型 $User = D('User');
會匯入目前專案下面的Lib/Model/UserModel.class.php文件,然後實例化UserModel類,所以,實際上的程式碼可能和下面的等效:
import('@.Model.UserModel'); $User = new UserModel();
D方法可以支援跨分組和專案實例化模型,例如:
//实例化Admin项目的User模型 D('Admin://User') //实例化Admin分组的User模型 D('Admin/User')
3.1版本開始,由於增加了分層模型的支持,因此D方法也可以實例化其他的模型,例如:
// 实例化UserService类 $User = D('User','Service'); // 实例化UserLogic类 $User = D('User','Logic');
D('User','Service');
會導入Lib/Service/UserService.class.php,並實例化。
擴充知識: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是指你的模型檔名)。
【相關教學推薦:thinkphp框架】
以上是thinkphp D方法回傳什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!