《PHP實(shí)例:ThinkPHP函數(shù)詳解之M方法和R方法》要點(diǎn):
本文介紹了PHP實(shí)例:ThinkPHP函數(shù)詳解之M方法和R方法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相關(guān)主題:thinkphp教程
PHP學(xué)習(xí)首先給大家介紹ThinkPHP函數(shù)詳解:M辦法
PHP學(xué)習(xí)M辦法用于實(shí)例化一個(gè)基礎(chǔ)模型類,和D辦法的區(qū)別在于:
PHP學(xué)習(xí)1、不需要自定義模型類,減少IO加載,性能較好;
PHP學(xué)習(xí)2、實(shí)例化后只能調(diào)用基礎(chǔ)模型類(默認(rèn)是Model類)中的辦法;
PHP學(xué)習(xí)3、可以在實(shí)例化的時(shí)候指定表前綴、數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)的連接信息;
PHP學(xué)習(xí)D辦法的強(qiáng)大則體現(xiàn)在你封裝的自定義模型類有多強(qiáng),不過(guò)隨著新版ThinkPHP框架的基礎(chǔ)模型類的功能越來(lái)越強(qiáng)大,M辦法也比D辦法越來(lái)越實(shí)用了.
PHP學(xué)習(xí)M辦法的調(diào)用格式:
PHP學(xué)習(xí)M('[基礎(chǔ)模型名:]模型名','數(shù)據(jù)表前綴','數(shù)據(jù)庫(kù)連接信息')
PHP學(xué)習(xí)我們來(lái)看下M辦法具體有哪些用法:
PHP學(xué)習(xí)1、實(shí)例化基礎(chǔ)模型(Model) 類
PHP學(xué)習(xí)在沒(méi)有定義任何模型的時(shí)候,我們可以使用下面的辦法實(shí)例化一個(gè)模型類來(lái)進(jìn)行操作:
PHP學(xué)習(xí)
//實(shí)例化User模型
$User = M('User');
//執(zhí)行其他的數(shù)據(jù)操作
$User->select();
PHP學(xué)習(xí)這種辦法最簡(jiǎn)單高效,因?yàn)椴恍枰x任何的模型類,所以支持跨項(xiàng)目調(diào)用.缺點(diǎn)也是因?yàn)闆](méi)有自定義的模型類,因此無(wú)法寫入相關(guān)的業(yè)務(wù)邏輯,只能完成基本的CURD操作.
PHP學(xué)習(xí)
$User = M('User');
PHP學(xué)習(xí)其實(shí)等效于:
PHP學(xué)習(xí)
$User = new Model('User');
PHP學(xué)習(xí)表示操作think_user表.M辦法和D辦法一樣也有單例功能,多次調(diào)用并不會(huì)重復(fù)實(shí)例化.M辦法的模型名參數(shù)在轉(zhuǎn)換成數(shù)據(jù)表的時(shí)候會(huì)自動(dòng)轉(zhuǎn)換成小寫,也就是說(shuō)ThinkPHP的數(shù)據(jù)表命名規(guī)范是全小寫的格式.
PHP學(xué)習(xí)2、實(shí)例化其他公共模型類
PHP學(xué)習(xí)第一種方式實(shí)例化因?yàn)闆](méi)有模型類的定義,因此很難封裝一些額外的邏輯辦法,不過(guò)大多數(shù)情況下,也許只是需要擴(kuò)展一些通用的邏輯,那么就可以嘗試下面一種辦法.
PHP學(xué)習(xí)
$User = M('CommonModel:User');
PHP學(xué)習(xí)改用法其實(shí)等效于:
PHP學(xué)習(xí)
$User = new CommonModel('User');
PHP學(xué)習(xí)因?yàn)橄到y(tǒng)的模型類都能夠自動(dòng)加載,因此我們不需要在實(shí)例化之前手動(dòng)進(jìn)行類庫(kù)導(dǎo)入操作.模型類CommonModel必須繼承Model.我們可以在CommonModel類里面定義一些通用的邏輯辦法,就可以省去為每個(gè)數(shù)據(jù)表定義具體的模型類,如果你的項(xiàng)目已經(jīng)有超過(guò)100個(gè)數(shù)據(jù)表了,而大多數(shù)情況都是一些基本的CURD操作的話,只是個(gè)別模型有一些復(fù)雜的業(yè)務(wù)邏輯需要封裝,那么第一種方式和第二種方式的結(jié)合是一個(gè)不錯(cuò)的選擇.
PHP學(xué)習(xí)3、傳入表前綴、數(shù)據(jù)庫(kù)和其他信息
PHP學(xué)習(xí)M辦法有三個(gè)參數(shù),第一個(gè)參數(shù)是模型名稱(可以包括基礎(chǔ)模型類和數(shù)據(jù)庫(kù)),第二個(gè)參數(shù)用于設(shè)置數(shù)據(jù)表的前綴(留空則取當(dāng)前項(xiàng)目配置的表前綴),第三個(gè)參數(shù)用于設(shè)置當(dāng)前使用的數(shù)據(jù)庫(kù)連接信息(留空則取當(dāng)前項(xiàng)目配置的數(shù)據(jù)庫(kù)連接信息),例如:
PHP學(xué)習(xí)
$User = M('db2.User','think_');
PHP學(xué)習(xí)表示實(shí)例化Model模型類,并操作db2數(shù)據(jù)庫(kù)中的think_user表.
PHP學(xué)習(xí)如果第二個(gè)參數(shù)留空或者不傳,表示使用當(dāng)前項(xiàng)目配置中的數(shù)據(jù)表前綴,如果操作的數(shù)據(jù)表沒(méi)有表前綴,那么可以使用:
PHP學(xué)習(xí)
$User = M('db1.User',null);
PHP學(xué)習(xí)表示實(shí)例化Model模型類,并操作db1數(shù)據(jù)庫(kù)中的user表.
PHP學(xué)習(xí)如果你操作的數(shù)據(jù)庫(kù)需要不同的用戶賬號(hào),可以傳入數(shù)據(jù)庫(kù)的連接信息,例如:
PHP學(xué)習(xí)
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
PHP學(xué)習(xí)表示基礎(chǔ)模型類用Model,然后對(duì)think_user表進(jìn)行操作,用user_a賬號(hào)進(jìn)行數(shù)據(jù)庫(kù)連接,操作數(shù)據(jù)庫(kù)是thinkphp.
PHP學(xué)習(xí)第三個(gè)連接信息參數(shù)可以使用DSN配置或者數(shù)組配置,甚至可以支持配置參數(shù).
PHP學(xué)習(xí)例如,在項(xiàng)目配置文件中配置了:
PHP學(xué)習(xí)
'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';
PHP學(xué)習(xí)則可以使用:
PHP學(xué)習(xí)
$User = M('User','think_','DB_CONFIG');
PHP學(xué)習(xí)基礎(chǔ)模型類和數(shù)據(jù)庫(kù)可以一起使用,例如:
PHP學(xué)習(xí)
$User = M('CommonModel:db2.User','think_');
PHP學(xué)習(xí)如果要實(shí)例化分層模型的話,利用公共模型類的方式,我們可以使用:
PHP學(xué)習(xí)
M('UserLogic:User');
PHP學(xué)習(xí)來(lái)實(shí)例化UserLogic,雖然這樣做的意義不大,因?yàn)榭梢杂?/p>
PHP學(xué)習(xí)
D('User','Logic');
PHP學(xué)習(xí)實(shí)現(xiàn)同樣的功能.
PHP學(xué)習(xí)ThinkPHP函數(shù)詳解:R辦法
PHP學(xué)習(xí)R辦法用于調(diào)用某個(gè)控制器的操作辦法,是A辦法的進(jìn)一步增強(qiáng)和補(bǔ)充.關(guān)于A辦法的用法見(jiàn)這里.
PHP學(xué)習(xí)R辦法的調(diào)用格式:
PHP學(xué)習(xí)R('[項(xiàng)目://][分組/]模塊/操作','參數(shù)','控制器層名稱')
PHP學(xué)習(xí)例如,我們定義了一個(gè)操作辦法為:
PHP學(xué)習(xí)
class UserAction extends Action {
public function detail($id){
return M('User')->find($id);
}
}
PHP學(xué)習(xí)那么就可以通過(guò)R辦法在其他控制器里面調(diào)用這個(gè)操作辦法(一般R辦法用于跨模塊調(diào)用)
PHP學(xué)習(xí)
$data = R('User/detail',array('5'));
PHP學(xué)習(xí)表示調(diào)用User控制器的detail辦法(detail辦法必須是public類型),返回值就是查詢id為5的一個(gè)用戶數(shù)據(jù).如果你要調(diào)用的操作辦法是沒(méi)有任何參數(shù)的話,第二個(gè)參數(shù)則可以留空,直接使用:
PHP學(xué)習(xí)
$data = R('User/detail');
PHP學(xué)習(xí)也可以支持跨分組和項(xiàng)目調(diào)用,例如:
PHP學(xué)習(xí)
R('Admin/User/detail',array('5'));
PHP學(xué)習(xí)表示調(diào)用Admin分組下面的User控制器的detail辦法.
PHP學(xué)習(xí)
R('Admin://User/detail',array('5'));
PHP學(xué)習(xí)表示調(diào)用Admin項(xiàng)目下面的User控制器的detail辦法.
PHP學(xué)習(xí)官方的建議是不要在同一層多太多調(diào)用,會(huì)引起邏輯的混亂,被公共調(diào)用的部分應(yīng)該封裝成單獨(dú)的接口,可以借助3.1的新特性多層控制器,單獨(dú)添加一個(gè)控制器層用于接口調(diào)用,例如,我們?cè)黾右粋€(gè)Api控制器層,
PHP學(xué)習(xí)
class UserApi extends Action {
public function detail($id){
return M('User')->find($id);
}
}
PHP學(xué)習(xí)然后,使用R辦法調(diào)用
PHP學(xué)習(xí)
$data = R('User/detail',array('5'),'Api');
PHP學(xué)習(xí)也就是說(shuō),R辦法的第三個(gè)參數(shù)支持指定調(diào)用的控制器層.
PHP學(xué)習(xí)同時(shí),R辦法調(diào)用操作辦法的時(shí)候可以支持操作后綴設(shè)置C('ACTION_SUFFIX'),如果你設(shè)置了操作辦法后綴,仍然不需要更改R辦法的調(diào)用方式.
PHP學(xué)習(xí)以上內(nèi)容給大家分享了ThinkPHP函數(shù)詳解之M辦法和R辦法,希望對(duì)大家有所幫助.
維易PHP培訓(xùn)學(xué)院每天發(fā)布《PHP實(shí)例:ThinkPHP函數(shù)詳解之M方法和R方法》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/8747.html