欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

M方法的調用格式:

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

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

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

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

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

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

$User = M('User');

其實等效于:

$User = new Model('User');

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

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

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

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

改用法其實等效于:

$User = new CommonModel('User');

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

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

M方法有三個參數(shù),第一個參數(shù)是模型名稱(可以包括基礎模型類和數(shù)據(jù)庫),第二個參數(shù)用于設置數(shù)據(jù)表的前綴(留空則取當前項目配置的表前綴),第三個參數(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');

表示基礎模型類用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');

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

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

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

M('UserLogic:User');

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

D('User','Logic');

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

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

R方法用于調用某個控制器的操作方法,是A方法的進一步增強和補充。關于A方法的用法見這里。

R方法的調用格式:

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

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

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

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

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

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

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

也可以支持跨分組和項目調用,例如:

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

表示調用Admin分組下面的User控制器的detail方法。

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

表示調用Admin項目下面的User控制器的detail方法。

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

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

然后,使用R方法調用

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

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

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

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

相關文章

  • Yii2基于Ajax自動獲取表單數(shù)據(jù)的方法

    Yii2基于Ajax自動獲取表單數(shù)據(jù)的方法

    這篇文章主要介紹了Yii2基于Ajax自動獲取表單數(shù)據(jù)的方法,涉及Yii結合ajax調用鼠標事件動態(tài)查詢表單的相關技巧,需要的朋友可以參考下
    2016-08-08
  • PHPstorm激活碼2020年5月13日親測有效

    PHPstorm激活碼2020年5月13日親測有效

    這篇文章主要介紹了PHPstorm激活碼2020年5月13日親測有效,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Google PR查詢接口checksum新算法

    Google PR查詢接口checksum新算法

    前些日子一篇N久之前的老文忽然成了被閱讀的熱點,檢查之后才發(fā)現(xiàn)自己使用那段代碼來做pr查詢的頁面已經不能正常得到URL的Page Rank值了
    2009-01-01
  • PHP jQuery表單,帶驗證具體實現(xiàn)方法

    PHP jQuery表單,帶驗證具體實現(xiàn)方法

    這篇文章主要介紹了PHP jQuery表單,帶驗證具體實現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • 給ECShop添加最新評論

    給ECShop添加最新評論

    這篇文章主要介紹了給ECShop添加最新評論的方法及代碼分享,需要的朋友可以參考下
    2015-01-01
  • 關于Laravel參數(shù)驗證的一些疑與惑

    關于Laravel參數(shù)驗證的一些疑與惑

    這篇文章主要給大家介紹了關于Laravel參數(shù)驗證的一些疑與惑,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Laravel具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • 基于PHP給大家講解防刷票的一些技巧

    基于PHP給大家講解防刷票的一些技巧

    刷票行為,一直是一個難題,無法從根本上解決問題,目前最好的解決辦法就是通過人為增加的邏輯限制,下面給大家介紹基于PHP給大家講解防刷票的一些技巧,小伙伴們跟著腳本之家的小編一起學習吧
    2015-11-11
  • mysqli_set_charset和SET NAMES使用抉擇及優(yōu)劣分析

    mysqli_set_charset和SET NAMES使用抉擇及優(yōu)劣分析

    盡量使用mysqli_set_charset(mysqli:set_charset)而不是SET NAMES, 當然, 這個內容在PHP手冊中也有敘及, 但是卻沒有解釋為什么,接下來為您揭下神秘面紗
    2013-01-01
  • YII框架行為behaviors用法示例

    YII框架行為behaviors用法示例

    這篇文章主要介紹了YII框架行為behaviors用法,結合實例形式分析了Yii框架行為behaviors的添加與使用簡單操作技巧,需要的朋友可以參考下
    2019-04-04
  • 提高php編程效率技巧

    提高php編程效率技巧

    php是全球范圍應用范圍最廣的開發(fā)語言,php和linux、apache、mysql緊密結合,形成了lamp的開源黃金搭檔。因其php具有開發(fā)周期短、免費、穩(wěn)定、安全、簡單易學、跨平臺等優(yōu)勢,被評為最受歡迎的編程語言,下面小編給大家整理了提高php編程效率的20個要點,需要的可以參考
    2015-08-08

最新評論