ThinkPHP函數(shù)中的M方法和R方法是什么-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“ThinkPHP函數(shù)中的M方法和R方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“ThinkPHP函數(shù)中的M方法和R方法是什么”吧!

固鎮(zhèn)網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,固鎮(zhèn)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為固鎮(zhèn)千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營銷網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的固鎮(zhèn)做網(wǎng)站的公司定做!

首先給大家介紹ThinkPHP函數(shù)詳解:M方法

M方法用于實(shí)例化一個基礎(chǔ)模型類,和D方法的區(qū)別在于:

1、不需要自定義模型類,減少IO加載,性能較好;


2、實(shí)例化后只能調(diào)用基礎(chǔ)模型類(默認(rèn)是Model類)中的方法;


3、可以在實(shí)例化的時候指定表前綴、數(shù)據(jù)庫和數(shù)據(jù)庫的連接信息;

D方法的強(qiáng)大則體現(xiàn)在你封裝的自定義模型類有多強(qiáng),不過隨著新版ThinkPHP框架的基礎(chǔ)模型類的功能越來越強(qiáng)大,M方法也比D方法越來越實(shí)用了。


M方法的調(diào)用格式:

M('[基礎(chǔ)模型名:]模型名','數(shù)據(jù)表前綴','數(shù)據(jù)庫連接信息')

我們來看下M方法具體有哪些用法:

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

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

//實(shí)例化User模型
$User = M('User');
//執(zhí)行其他的數(shù)據(jù)操作
$User->select();

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

$User = M('User');

其實(shí)等效于:

$User = new Model('User');

表示操作think_user表。M方法和D方法一樣也有單例功能,多次調(diào)用并不會重復(fù)實(shí)例化。M方法的模型名參數(shù)在轉(zhuǎn)換成數(shù)據(jù)表的時候會自動轉(zhuǎn)換成小寫,也就是說ThinkPHP的數(shù)據(jù)表命名規(guī)范是全小寫的格式。

2、實(shí)例化其他公共模型類

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

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

改用法其實(shí)等效于:

$User = new CommonModel('User');

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

3、傳入表前綴、數(shù)據(jù)庫和其他信息

M方法有三個參數(shù),第一個參數(shù)是模型名稱(可以包括基礎(chǔ)模型類和數(shù)據(jù)庫),第二個參數(shù)用于設(shè)置數(shù)據(jù)表的前綴(留空則取當(dāng)前項(xiàng)目配置的表前綴),第三個參數(shù)用于設(shè)置當(dāng)前使用的數(shù)據(jù)庫連接信息(留空則取當(dāng)前項(xiàng)目配置的數(shù)據(jù)庫連接信息),例如:

$User = M('db2.User','think_');

表示實(shí)例化Model模型類,并操作db2數(shù)據(jù)庫中的think_user表。

如果第二個參數(shù)留空或者不傳,表示使用當(dāng)前項(xiàng)目配置中的數(shù)據(jù)表前綴,如果操作的數(shù)據(jù)表沒有表前綴,那么可以使用:

$User = M('db1.User',null);

表示實(shí)例化Model模型類,并操作db1數(shù)據(jù)庫中的user表。

如果你操作的數(shù)據(jù)庫需要不同的用戶賬號,可以傳入數(shù)據(jù)庫的連接信息,例如:

$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');

表示基礎(chǔ)模型類用Model,然后對think_user表進(jìn)行操作,用user_a賬號進(jìn)行數(shù)據(jù)庫連接,操作數(shù)據(jù)庫是thinkphp。

第三個連接信息參數(shù)可以使用DSN配置或者數(shù)組配置,甚至可以支持配置參數(shù)。

例如,在項(xiàng)目配置文件中配置了:

'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';

則可以使用:

$User = M('User','think_','DB_CONFIG');

基礎(chǔ)模型類和數(shù)據(jù)庫可以一起使用,例如:

$User = M('CommonModel:db2.User','think_');

如果要實(shí)例化分層模型的話,利用公共模型類的方式,我們可以使用:

M('UserLogic:User');

來實(shí)例化UserLogic,雖然這樣做的意義不大,因?yàn)榭梢杂?/p>

D('User','Logic');

實(shí)現(xiàn)同樣的功能。

ThinkPHP函數(shù)詳解:R方法

R方法用于調(diào)用某個控制器的操作方法,是A方法的進(jìn)一步增強(qiáng)和補(bǔ)充。關(guān)于A方法的用法見這里。

R方法的調(diào)用格式:

R('[項(xiàng)目://][分組/]模塊/操作','參數(shù)','控制器層名稱')

例如,我們定義了一個操作方法為:

class UserAction extends Action {
 public function detail($id){
  return M('User')->find($id);
 }
 }

那么就可以通過R方法在其他控制器里面調(diào)用這個操作方法(一般R方法用于跨模塊調(diào)用)

$data = R('User/detail',array('5'));

表示調(diào)用User控制器的detail方法(detail方法必須是public類型),返回值就是查詢id為5的一個用戶數(shù)據(jù)。如果你要調(diào)用的操作方法是沒有任何參數(shù)的話,第二個參數(shù)則可以留空,直接使用:

$data = R('User/detail');

也可以支持跨分組和項(xiàng)目調(diào)用,例如:

R('Admin/User/detail',array('5'));

表示調(diào)用Admin分組下面的User控制器的detail方法。

R('Admin://User/detail',array('5'));

表示調(diào)用Admin項(xiàng)目下面的User控制器的detail方法。

官方的建議是不要在同一層多太多調(diào)用,會引起邏輯的混亂,被公共調(diào)用的部分應(yīng)該封裝成單獨(dú)的接口,可以借助3.1的新特性多層控制器,單獨(dú)添加一個控制器層用于接口調(diào)用,例如,我們增加一個Api控制器層,

class UserApi extends Action {
 public function detail($id){
  return M('User')->find($id);
 }
 }

然后,使用R方法調(diào)用

$data = R('User/detail',array('5'),'Api');

也就是說,R方法的第三個參數(shù)支持指定調(diào)用的控制器層。


同時,R方法調(diào)用操作方法的時候可以支持操作后綴設(shè)置C('ACTION_SUFFIX'),如果你設(shè)置了操作方法后綴,仍然不需要更改R方法的調(diào)用方式。

到此,相信大家對“ThinkPHP函數(shù)中的M方法和R方法是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享題目:ThinkPHP函數(shù)中的M方法和R方法是什么-創(chuàng)新互聯(lián)
URL鏈接:http://bm7419.com/article32/dsedpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站策劃、標(biāo)簽優(yōu)化關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)