ThinkPHP開發指南-模型之定義和實例化

ThinkPHP2.0版本中,可以無需進行任何模型定義。只有在需要封裝單獨的業務邏輯的時候,模型類纔是必須被定義的,因此ThinkPHP在模型上有很多的靈活和方便性,讓你無需因爲表太多而煩惱。

根據不同的模型定義,我們有幾種實例化模型的方法,下面來分析下什麼情況下用什麼方法:

  • 實例化基礎模型(Model) 類

在沒有定義任何模型的時候,我們可以使用下面的方法實例化一個模型類來進行操作:

PHP代碼

$User = new Model('User'); 

或者使用M快捷方法實例化是等效的

PHP代碼

$User = M('User');    

$User->select(); // 進行其他的數據操作 

這種方法最簡單高效,因爲不需要定義任何的模型類,所以支持跨項目調用。缺點也是因爲沒有自定義的模型類,因此無法寫入相關的業務邏輯,只能完成基本的CURD操作。

  • 實例化其他模型類

第一種方式實例化因爲沒有模型類的定義,因此很難封裝一些額外的邏輯方法,不過大多數情況下,也許只是需要擴展一些通用的邏輯,那麼就可以嘗試下面一種方法。

M方法默認是實例化Model類,如果需要實例化其他模型類,可以使用

PHP代碼

$User = M('User', 'CommonModel'); 

上面的方法等效於

PHP代碼

$User = new CommonModel('User'); 

因爲系統的模型類都能夠自動加載,因此我們不需要在實例化之前手動進行類庫導入操作。模型類commonModel必須繼承Model,如果沒有定義別名導入的話,需要放在項目Model下。我們可以在CommonModel類裏面定義一些通用的邏輯方法,就可以省去爲每個數據表定義具體的模型類,如果你的項目已經有超過100個數據表了,而大多數情況都是一些基本的CURD操作的話,只是個別模型有一些複雜的業務邏輯需要封裝,那麼第一種方式和第二種方式的結合是一個不錯的選擇。

  • 實例化用戶定義的模型(×××Model)類

這種情況是使用的最多的,一個項目不可避免的需要定義自身的業務邏輯實現,就需要針對每個數據表定義一個模型類,例如UserModel 、InfoModel等等。

定義的模型類通常都是放到項目的LibModel目錄下面。例如,

PHP代碼

class UserModel extends Model{ 
 Public function myfun(){    

 // 添加自己的業務邏輯    

 // ………    

}    

} 

其實模型類還可以繼承一個用戶自定義的公共模型類,而不是隻能繼承Model類。要實例化自定義模型類,可以使用下面的方式:

PHP代碼

$User = new UserModel();

或者使用D快捷方法實例化是等效的

PHP代碼

$User = D('User');    

$User->select(); // 進行其他的數據操作

D方法可以自動檢測模型類,不存在時系統會拋出異常,同時對於已實例化過的模型,不會重複去實例化。默認的D方法只能支持調用當前項目的模型,如果需要跨項目調用,需要使用:

PHP代碼

$User = D('User', 'Admin'); // 實例化Admin項目下面的User模型    

$User->select(); 

如果啓用了模塊分組功能,可使用:

PHP代碼

$User = D('Admin.User'); 
  • 實例化空模型類

如果你僅僅是使用原生SQL查詢的話,不需要使用額外的模型類,實例化一個空模型類即可進行操作了,例如:

PHP代碼

$Model = new Model();

// 或者使用M快捷方法實例化是等效的

PHP代碼

<pre>
$Model = M();  
$Model->query('SELECT * FROM think_user where status=1');  

空模型類也支持跨項目調用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章