首頁  >  文章  >  php框架  >  thinkphp D方法回傳什麼

thinkphp D方法回傳什麼

青灯夜游
青灯夜游原創
2022-03-15 18:51:271669瀏覽

在thinkphp中,D方法可以傳回實例化的模型物件。 D方法用於實例化自訂模型類,是ThinkPHP框架對Model類實例化的一種封裝,語法“D('[項目://][分組/]模型','模型層名稱')”,傳回值為實例化的模型物件。

thinkphp 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn