回覆列表
  • 1 # 曉凡書屋

    根據不同的模型定義,我們有幾種例項化模型的方法,下面來分析下什麼情況下用什麼方法: 1、例項化基礎模型(Model) 類 在沒有定義任何模型的時候,我們可以使用下面的方法例項化一個模型類來進行操作: $User = new Model("User"); 或者使用M快捷方法例項化是等效的 $User = M("User"); $User->select(); // 進行其他的資料操作 這種方法最簡單高效,因為不需要定義任何的模型類,所以支援跨專案呼叫。缺點也是因為沒有自定義的模型類,因此無法寫入相關的業務邏輯,只能完成基本的CURD操作。 2、例項化其他模型類 第一種方式例項化因為沒有模型類的定義,因此很難封裝一些額外的邏輯方法,不過大多數情況下,也許只是需要擴充套件一些通用的邏輯,那麼就可以嘗試下面一種方法。 M方法預設是例項化Model類,如果需要例項化其他模型類,可以使用 $User = M("User", "CommonModel"); 上面的方法等效於 $User = new CommonModel("User"); 因為系統的模型類都能夠自動載入,因此我們不需要在例項化之前手動進行類庫匯入操作。模型類CommonModel必須繼承Model,如果沒有定義別名匯入的話,需要放在專案Model下。我們可以在CommonModel類裡面定義一些通用的邏輯方法,就可以省去為每個資料表定義具體的模型類,如果你的專案已經有超過100個數據表了,而大多數情況都是一些基本的CURD操作的話,只是個別模型有一些複雜的業務邏輯需要封裝,那麼第一種方式和第二種方式的結合是一個不錯的選擇。 3、例項化使用者定義的模型(×××Model)類 這種情況是使用的最多的,一個專案不可避免的需要定義自身的業務邏輯實現,就需要針對每個資料表定義一個模型類,例如UserModel 、InfoModel等等。 定義的模型類通常都是放到專案的Lib\Model目錄下面。例如, class UserModel extends Model{ Public function myfun(){ // 新增自己的業務邏輯 // ……… } } 其實模型類還可以繼承一個使用者自定義的公共模型類,而不是隻能繼承Model類。 要例項化自定義模型類,可以使用下面的方式: $User = new UserModel(); 或者使用D快捷方法例項化是等效的 $User = D("User"); $User->select(); // 進行其他的資料操作 D方法可以自動檢測模型類,如果存在自定義的模型類,則例項化自定義模型類,如果不存在,則會例項化Model基類,同時對於已例項化過的模型,不會重複去例項化。預設的D方法只能支援呼叫當前專案的模型,如果需要跨專案呼叫,需要使用: $User = D("User", "Admin"); // 例項化Admin專案下面的User模型 $User->select(); 如果啟用了模組分組功能,可使用: $User = D("Admin.User"); 4、例項化空模型類 如果你僅僅是使用原生SQL查詢的話,不需要使用額外的模型類,例項化一個空模型類即可進行操作了,例如: $Model = new Model(); // 或者使用M快捷方法例項化是等效的 // $Model = M(); $Model->query("SELECT * FROM think_user where status=1"); 空模型類也支援跨專案呼叫。

  • 中秋節和大豐收的關聯?
  • 夢幻西遊專屬序列號怎麼啟用,人物等級已經61了,是新申請的帳號?