例項化模型時的M方法和D方法的理解辨析

2021-10-23 07:16:41 字數 1436 閱讀 7314

模型例項化——當定義了模型之後,需要在操作中將模型例項化才能具體實現模型中的業務邏輯。

不同的資料業務規則會有不同的模型定義,而在例項化模型的時候也可能不同。

thinkphp支援如下幾種例項化模型:例項化基礎模型類例項化其他模型類例項化使用者自定義模型類例項化空模型類

模型本質上是乙個例項類,該類封裝了運算元據庫的常見方法,模型一旦被例項化,意味著開始鏈結資料庫。thinkphp不強制自定義模型與資料表進行對映,開發人員完全可以當成乙個普通的類檔案來使用,所以使用new方式也是沒任何問題的。為了簡單操作,thinkphp還提供了3種方式快速例項化模型,如下所示

new model(『資料表名』),使用傳統的new方式例項化model基類,該類封裝了運算元據庫的常見方法。需要注意的是new方式不能例項化自定義模型。

m(name=『』,class=『model』),快捷函式例項化模型。引數name表示資料表名稱,class表示自定模型類。m函式可以在初始化資料表後再例項化乙個自定義的模型類。

m函式可以方便地進行資料庫操作。利用自定義模型能夠實現更複雜的資料庫操作。m函式的第1個引數表示資料表名,不能為空;第2個引數為自定義模型,如果載入自定義模型,該模型類必須位於當前專案。

在實際應用開發中經常需要初始化一些全域性介面。例如**的會員系統,在訪客進入會員系統前一般都需要判斷該使用者的許可權、級別,以便於系統分配相應的功能;再比如一些第三方擴充套件類,在呼叫自定模型之前都需要初始化。在標準的php類設計中,通常開發人員會在建構函式中完成這些初始化的操作。但在thinkphp自定義模型中,並不允許使用建構函式,只提供了_initialize()方法,該方法擁有最高的優先順序,所有的自定義類只要存在_initialize()方法,就會首先執行該方法。

(m函式同樣可以例項化自定義模型,但該函式必須先初始化資料庫,然後才能例項化自定義模型類d方法可以自動檢測模型類,如果存在自定義的模型類,則例項化自定義模型類,如果不存在,則會例項化系統的\think\model基類,同時對於已例項化過的模型,不會重複去例項化。

d方法還可以支援跨模組呼叫,需要使用:

//例項化admin模組的user模型

d('admin/user');

//例項化extend擴充套件命名空間下的info模型

d('extend://editor/info'

在例項化的過程中,經常使用d方法和m方法,這兩個方法的區別在於m方法例項化模型無需使用者為每個資料表定義模型類,如果d方法沒有找到定義的模型類,則會自動呼叫m方法。

簡單的說,就是如果要使用d('user')方法例項化,就要在model目錄下新建乙個相對應模型類檔案,比如usermodel.class.php,而m方法則不需要建立這麼乙個模型類檔案,可以直接根據資料庫表例項化乙個表的例項模型了,m例項化引數是資料庫的表名。所以,用d方法的時候如果d方法沒有找到具體的模型類,就會自動預設使用m方法。

thinkphp例項化模型類D和M區別

我們可以用下面兩種方法去建立乙個資料表的對映物件 我暫時用到的 第一種 test d test 第二種 test new model test 雖然這兩種都可以對資料進行select,insert,delete,udpate操作,在資料驗證上有很大的不同,用第一種方式例項乙個模型就會有資料檢查功能,...

thinkphp中的M方法和D方法

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

ThinkPHP 例項化模型的方法

1 例項化乙個 model array explode name name array pop array 對於類似aaa.bbb.ccc結構檔名的model類,只取到第一節 2 例項化乙個沒有模型檔案的model function m name class model 3 model類建構函式 p...