久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

ThinkPHP開(kāi)發(fā)指南-模型之定義和實(shí)例化

來(lái)自站長(zhǎng)百科
Zhou3158討論 | 貢獻(xiàn)2010年4月30日 (五) 11:25的版本
(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航:上一頁(yè)

ThinkPHP2.0版本中,可以無(wú)需進(jìn)行任何模型定義。只有在需要封裝單獨(dú)的業(yè)務(wù)邏輯的時(shí)候,模型類才是必須被定義的,因此ThinkPHP在模型上有很多的靈活和方便性,讓你無(wú)需因?yàn)楸硖喽鵁馈?

根據(jù)不同的模型定義,我們有幾種實(shí)例化模型的方法,下面來(lái)分析下什么情況下用什么方法:

  • 實(shí)例化基礎(chǔ)模型(Model) 類

在沒(méi)有定義任何模型的時(shí)候,我們可以使用下面的方法實(shí)例化一個(gè)模型類來(lái)進(jìn)行操作:

PHP代碼

$User = new Model('User'); 

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

PHP代碼

$User = M('User');    

$User->select(); // 進(jìn)行其他的數(shù)據(jù)操作 

這種方法最簡(jiǎn)單高效,因?yàn)椴恍枰x任何的模型類,所以支持跨項(xiàng)目調(diào)用。缺點(diǎn)也是因?yàn)闆](méi)有自定義的模型類,因此無(wú)法寫(xiě)入相關(guān)的業(yè)務(wù)邏輯,只能完成基本的CURD操作。

  • 實(shí)例化其他模型類

第一種方式實(shí)例化因?yàn)闆](méi)有模型類的定義,因此很難封裝一些額外的邏輯方法,不過(guò)大多數(shù)情況下,也許只是需要擴(kuò)展一些通用的邏輯,那么就可以嘗試下面一種方法。

M方法默認(rèn)是實(shí)例化Model類,如果需要實(shí)例化其他模型類,可以使用

PHP代碼

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

上面的方法等效于

PHP代碼

$User = new CommonModel('User'); 

因?yàn)橄到y(tǒng)的模型類都能夠自動(dòng)加載,因此我們不需要在實(shí)例化之前手動(dòng)進(jìn)行類庫(kù)導(dǎo)入操作。模型類commonModel必須繼承Model,如果沒(méi)有定義別名導(dǎo)入的話,需要放在項(xiàng)目Model下。我們可以在CommonModel類里面定義一些通用的邏輯方法,就可以省去為每個(gè)數(shù)據(jù)表定義具體的模型類,如果你的項(xiàng)目已經(jīng)有超過(guò)100個(gè)數(shù)據(jù)表了,而大多數(shù)情況都是一些基本的CURD操作的話,只是個(gè)別模型有一些復(fù)雜的業(yè)務(wù)邏輯需要封裝,那么第一種方式和第二種方式的結(jié)合是一個(gè)不錯(cuò)的選擇。

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

這種情況是使用的最多的,一個(gè)項(xiàng)目不可避免的需要定義自身的業(yè)務(wù)邏輯實(shí)現(xiàn),就需要針對(duì)每個(gè)數(shù)據(jù)表定義一個(gè)模型類,例如UserModel 、InfoModel等等。

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

PHP代碼

class UserModel extends Model{ 
 Public function myfun(){    

 // 添加自己的業(yè)務(wù)邏輯    

 // ………    

}    

} 

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

PHP代碼


$User = new UserModel();

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

PHP代碼

$User = D('User');    

$User->select(); // 進(jìn)行其他的數(shù)據(jù)操作

D方法可以自動(dòng)檢測(cè)模型類,不存在時(shí)系統(tǒng)會(huì)拋出異常,同時(shí)對(duì)于已實(shí)例化過(guò)的模型,不會(huì)重復(fù)去實(shí)例化。默認(rèn)的D方法只能支持調(diào)用當(dāng)前項(xiàng)目的模型,如果需要跨項(xiàng)目調(diào)用,需要使用:

PHP代碼

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

$User->select(); 

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

PHP代碼

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

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

PHP代碼

$Model = new Model();

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

PHP代碼

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

空模型類也支持跨項(xiàng)目調(diào)用。