最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ThinkPHP函數(shù)詳解之M方法和R方法

 更新時間:2015年09月10日 10:43:53   投稿:mrr  
本篇文章給大家介紹ThinkPHP函數(shù)詳解之M方法和R方法,M方法用于實例化一個基礎(chǔ)模型類,而R方法用于調(diào)用某個控制器的操作方法,感興趣的朋友跟著腳本之家的小編一起來學(xué)習(xí)吧

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

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

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

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

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

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

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

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

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

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

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

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

這種方法最簡單高效,因為不需要定義任何的模型類,所以支持跨項目調(diào)用。缺點也是因為沒有自定義的模型類,因此無法寫入相關(guān)的業(yè)務(wù)邏輯,只能完成基本的CURD操作。

$User = M('User');

其實等效于:

$User = new Model('User');

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

2、實例化其他公共模型類

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

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

改用法其實等效于:

$User = new CommonModel('User');

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

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

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

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

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

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

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

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

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

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

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

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

例如,在項目配置文件中配置了:

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

則可以使用:

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

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

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

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

M('UserLogic:User');

來實例化UserLogic,雖然這樣做的意義不大,因為可以用

D('User','Logic');

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

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

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

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

R('[項目://][分組/]模塊/操作','參數(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');

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

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

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

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

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

官方的建議是不要在同一層多太多調(diào)用,會引起邏輯的混亂,被公共調(diào)用的部分應(yīng)該封裝成單獨的接口,可以借助3.1的新特性多層控制器,單獨添加一個控制器層用于接口調(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)用方式。

以上內(nèi)容給大家分享了ThinkPHP函數(shù)詳解之M方法和R方法,希望對大家有所幫助。

相關(guān)文章

  • 如何使用純PHP實現(xiàn)定時器任務(wù)(Timer)

    如何使用純PHP實現(xiàn)定時器任務(wù)(Timer)

    本文主要介紹了如何使用純PHP實現(xiàn)純粹的定時器任務(wù),且能適應(yīng)認識任務(wù)業(yè)務(wù)需求,需要的朋友可以參考下
    2015-07-07
  • Joomla使用Apache重寫模式的方法

    Joomla使用Apache重寫模式的方法

    這篇文章主要介紹了Joomla使用Apache重寫模式的方法,簡單講述了Joomla開啟Apache重寫模式的步驟與相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • Laravel使用swoole實現(xiàn)websocket主動消息推送的方法介紹

    Laravel使用swoole實現(xiàn)websocket主動消息推送的方法介紹

    這篇文章主要給大家介紹了關(guān)于Laravel使用swoole實現(xiàn)websocket主動消息推送的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • php curl簡單采集圖片生成base64編碼(并附curl函數(shù)參數(shù)說明)

    php curl簡單采集圖片生成base64編碼(并附curl函數(shù)參數(shù)說明)

    今天小編就為大家分享一篇關(guān)于php curl簡單采集圖片生成base64編碼(并附curl函數(shù)參數(shù)說明),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • php中curl使用指南

    php中curl使用指南

    這篇文章主要介紹了php中curl使用指南,十分詳細,需要的朋友可以參考下
    2015-02-02
  • Zend Framework入門之環(huán)境配置及第一個Hello World示例(附demo源碼下載)

    Zend Framework入門之環(huán)境配置及第一個Hello World示例(附demo源碼下載)

    這篇文章主要介紹了Zend Framework入門之環(huán)境配置及第一個Hello World示例,詳細講述了Zend Framework環(huán)境搭建與配置,以及實現(xiàn)第一個Hello World程序的方法,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-03-03
  • thinkPHP框架中執(zhí)行事務(wù)的方法示例

    thinkPHP框架中執(zhí)行事務(wù)的方法示例

    這篇文章主要介紹了thinkPHP框架中執(zhí)行事務(wù)的方法,結(jié)合實例形式分析了thinkPHP框架中使用模型中封裝的startTran()、Commit()及Rollback()方法執(zhí)行事務(wù)與回滾操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • laravel框架中路由設(shè)置,路由參數(shù)和路由命名實例分析

    laravel框架中路由設(shè)置,路由參數(shù)和路由命名實例分析

    這篇文章主要介紹了laravel框架中路由設(shè)置,路由參數(shù)和路由命名,結(jié)合實例形式分析了laravel框架中路由的設(shè)置、請求處理、映射、命名等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • linux下實現(xiàn)定時執(zhí)行php腳本

    linux下實現(xiàn)定時執(zhí)行php腳本

    這篇文章主要介紹了linux下實現(xiàn)定時執(zhí)行php腳本的方法及具體使用示例,非常不錯的文章,這里推薦給大家。
    2015-02-02
  • php基礎(chǔ)教程

    php基礎(chǔ)教程

    PHP是全球范圍內(nèi)應(yīng)用廣泛的開發(fā)語言,Web開發(fā)的最佳語言; PHP和Linux,Apache,MySQL緊密結(jié)合,形成LAMP的開源黃金組合,本文給大家php基礎(chǔ)教程,php基礎(chǔ),需要的朋友可以參考下
    2015-08-08

最新評論

铜梁县| 铁岭市| 建湖县| 安庆市| 璧山县| 施甸县| 台江县| 家居| 育儿| 云阳县| 梅州市| 绥化市| 启东市| 轮台县| 博客| 东兴市| 左权县| 渝中区| 凤台县| 库尔勒市| 屏东县| 商河县| 铁岭县| 公安县| 天镇县| 玉林市| 西乡县| 平和县| 定日县| 东台市| 江都市| 登封市| 玉屏| 宜兰县| 林口县| 澄城县| 綦江县| 普安县| 桐城市| 察隅县| 社旗县|