thinkphp D方法返回什么

thinkphp中,D方法可以返回實(shí)例化的模型對象。D方法用于實(shí)例化自定義模型類,是ThinkPHP框架對Model類實(shí)例化的一種封裝,語法“D(‘[項(xiàng)目://][分組/]模型’,’模型層名稱’)”,返回值為實(shí)例化的模型對象。

thinkphp D方法返回什么

本教程操作環(huán)境:Windows7系統(tǒng)、thinkphp v5.1版、Dell G3電腦。

D方法應(yīng)該是用的比較多的方法了,用于實(shí)例化自定義模型類,是ThinkPHP框架對Model類實(shí)例化的一種封裝,并實(shí)現(xiàn)了單例模式,支持跨項(xiàng)目和分組調(diào)用,調(diào)用格式如下:

D('[項(xiàng)目://][分組/]模型','模型層名稱')

D方法的返回值是實(shí)例化的模型對象。

D方法可以自動檢測模型類,如果存在自定義的模型類,則實(shí)例化自定義模型類,如果不存在,則會實(shí)例化Model基類,同時對于已實(shí)例化過的模型,不會重復(fù)去實(shí)例化。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

D方法最常用的用法就是實(shí)例化當(dāng)前項(xiàng)目的某個自定義模型,例如:

//?實(shí)例化User模型 $User?=?D('User');

會導(dǎo)入當(dāng)前項(xiàng)目下面的Lib/Model/UserModel.class.php文件,然后實(shí)例化UserModel類,所以,實(shí)際上的代碼可能和下面的等效:

import('@.Model.UserModel'); $User?=?new?UserModel();

D方法可以支持跨分組和項(xiàng)目實(shí)例化模型,例如:

//實(shí)例化Admin項(xiàng)目的User模型 D('Admin://User') //實(shí)例化Admin分組的User模型 D('Admin/User')

3.1版本開始,由于增加了分層模型的支持,所以D方法也可以實(shí)例化其他的模型,例如:

//?實(shí)例化UserService類 $User?=?D('User','Service'); //?實(shí)例化UserLogic類 $User?=?D('User','Logic');
D('User','Service');

會導(dǎo)入Lib/Service/UserService.class.php,并實(shí)例化。

擴(kuò)展知識:D和M的區(qū)別主要在于

M方法不需要創(chuàng)建模型類文件,M方法不會讀取模型類,所以默認(rèn)情況下自動驗(yàn)證是無效的,但是可以通過動態(tài)賦值的方式實(shí)現(xiàn)

而D方法必須有創(chuàng)建模型類。

我們可以用下面兩種方法去創(chuàng)建一個數(shù)據(jù)表的映射對象

第一種:$Test = D(‘Test’)

第二種:$Test = new Model(‘Test’)

雖然這兩種都可以對數(shù)據(jù)進(jìn)行select,insert,delete,udpate操作,在

數(shù)據(jù)驗(yàn)證上有很大的不同,

用第一種方式實(shí)例一個模型就會有數(shù)據(jù)檢查功能,如果 title 沒有填寫的話就會提示 “請輸入標(biāo)題” (這個是tp提供的一個自動驗(yàn)證功能,當(dāng)然也需要在相應(yīng)的model中定義好驗(yàn)證條件);

如果用第二種就沒有了這個數(shù)據(jù)驗(yàn)證功能,需要手動驗(yàn)證。

總結(jié)如下:

  • D函數(shù)實(shí)例化的是你當(dāng)前項(xiàng)目的Lib/Model下面的模塊。

  • 如果該模塊不存在的話,直接返回實(shí)例化Model的對象(意義就與M()函數(shù)相同)。

  • 而M只返回,實(shí)例化Model的對象。它的$name參數(shù)作為數(shù)據(jù)庫的表名來處理對數(shù)據(jù)庫的操作。

通俗點(diǎn)說:

  • D就是實(shí)例化一個基于Model文件的Model。

  • M則是通過直接實(shí)例化Model方法(ThinkPHP基類)來動態(tài)的實(shí)例化一個Model對象,即使這個對應(yīng)的Model文件不存在。

再通俗一點(diǎn)說:

  • M實(shí)例化參數(shù)是數(shù)據(jù)庫的表名。

  • D實(shí)例化的是你自己在Model文件夾下面建立的模型文件。

  • D就是在你沒有定義模型的時候,系統(tǒng)自動幫你定義一個模型,這樣你才進(jìn)行簡單的數(shù)據(jù)輸入或者輸出。

  • 每一個Action文件都應(yīng)該對應(yīng)Model文件的,如果你定義了Model的話,

如:$Form = D(“User”)就可以改成$Form = new? UserModel();(User是指你的模型文件名)。

【相關(guān)教程推薦:thinkphp框架

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享