在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');
空模型類也支持跨項目調用。