首頁 後端開發 php教程 ThinkPHP函數詳解之M方法與R方法

ThinkPHP函數詳解之M方法與R方法

Jun 06, 2018 pm 03:20 PM

這篇文章主要介紹了關於ThinkPHP函數詳解之M方法和R方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

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

M方法用於實例化一個基礎模型類,和D方法的區別在於:

1、不需要自訂模型類,減少IO加載,效能較好;

2、實例化後只能呼叫基礎模型類別(預設是Model類別)中的方法;

##3、可以在實例化的時候指定表前綴、資料庫和資料庫的連接資訊;

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


M方法的呼叫格式:

M('[基礎模型名稱:]模型名稱','資料表前綴','資料庫連接資訊')

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

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

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

//实例化User模型
$User = M('User');
//执行其他的数据操作
$User->select();
登入後複製

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

$User = M('User');
登入後複製

其實等效於:

#

$User = new Model('User');
登入後複製

表示操作think_user表。 M方法和D方法一樣也有單例功能,多次呼叫並不會重複實例化。 M方法的模型名參數在轉換成資料表的時候會自動轉換成小寫,也就是說ThinkPHP的資料表命名規範是全小寫的格式。

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

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

$User = M('CommonModel:User');
登入後複製

改用法其實等效於:

$User = new CommonModel('User');
登入後複製

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

3、傳入表格前綴、資料庫和其他資訊

M方法有三個參數,第一個參數是模型名稱(可以包括基礎模型類別和資料庫),第二個參數用於設定資料表的前綴(留空則取目前項目配置的表前綴),第三個參數用於設定目前使用的資料庫連接資訊(留空則取目前項目配置的資料庫連接資訊),例如:

$User = M('db2.User','think_');
登入後複製

表示實例化Model模型類,並操作db2資料庫中的think_user表。

如果第二個參數留空或不傳,表示使用目前專案配置中的資料表前綴,如果操作的資料表沒有表前綴,那麼可以使用:

$User = M('db1.User',null);
登入後複製

表示實例化Model模型類,並操作db1資料庫中的user表。

如果你操作的資料庫需要不同的使用者帳號,可以傳入資料庫的連線訊息,例如:

$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
登入後複製

表示基礎模型類用Model,然後對think_user表進行操作,用user_a帳號進行資料庫連接,操作資料庫是thinkphp。

第三個連接資訊參數可以使用DSN配置或陣列配置,甚至可以支援配置參數。

例如,在專案設定檔中設定了:

'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';
登入後複製

則可以使用:

$User = M('User','think_','DB_CONFIG');
登入後複製

基礎模型類別和資料庫可以一起使用,例如:

$User = M('CommonModel:db2.User','think_');
登入後複製

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

M('UserLogic:User');
登入後複製

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

D('User','Logic');
登入後複製

實作同樣的功能。

ThinkPHP函數詳解:R方法

R方法用於呼叫某個控制器的操作方法,是A方法的進一步增強和補充。關於A方法的用法請見這裡。

R方法的呼叫格式:

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

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

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的一个用户数据。如果你要调用的操作方法是没有任何参数的话,第二个参数则可以留空,直接使用:

$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方法的第三个参数支持指定调用的控制器层。

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

以上内容给大家分享了ThinkPHP函数详解之M方法和R方法,希望对大家有所帮助。

相关推荐:

ThinkPHP之R方法实例

以上是ThinkPHP函數詳解之M方法與R方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

解釋PHP中晚期靜態結合的概念。 解釋PHP中晚期靜態結合的概念。 Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

自定義/擴展框架:如何添加自定義功能。 自定義/擴展框架:如何添加自定義功能。 Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

如何在系統重啟後自動設置unixsocket的權限? 如何在系統重啟後自動設置unixsocket的權限? Mar 31, 2025 pm 11:54 PM

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

See all articles