WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計(jì)算
- 微博營(yíng)銷
- 虛擬主機(jī)管理系統(tǒng)
- 開放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
ThinkPHP開發(fā)指南-模型之定義和實(shí)例化
導(dǎo)航:上一頁(yè)
在ThinkPHP2.0版本中,可以無需進(jìn)行任何模型定義。只有在需要封裝單獨(dú)的業(yè)務(wù)邏輯的時(shí)候,模型類才是必須被定義的,因此ThinkPHP在模型上有很多的靈活和方便性,讓你無需因?yàn)楸硖喽鵁馈?
根據(jù)不同的模型定義,我們有幾種實(shí)例化模型的方法,下面來分析下什么情況下用什么方法:
- 實(shí)例化基礎(chǔ)模型(Model) 類
在沒有定義任何模型的時(shí)候,我們可以使用下面的方法實(shí)例化一個(gè)模型類來進(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)闆]有自定義的模型類,因此無法寫入相關(guān)的業(yè)務(wù)邏輯,只能完成基本的CURD操作。
- 實(shí)例化其他模型類
第一種方式實(shí)例化因?yàn)闆]有模型類的定義,因此很難封裝一些額外的邏輯方法,不過大多數(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,如果沒有定義別名導(dǎo)入的話,需要放在項(xiàng)目Model下。我們可以在CommonModel類里面定義一些通用的邏輯方法,就可以省去為每個(gè)數(shù)據(jù)表定義具體的模型類,如果你的項(xiàng)目已經(jīng)有超過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í)例化過的模型,不會(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)用。