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

這篇文章主要介紹了關於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
繼續使用PHP:耐力的原因繼續使用PHP:耐力的原因Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python:探索他們的相似性和差異PHP和Python:探索他們的相似性和差異Apr 19, 2025 am 12:21 AM

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。