ThinkPHP之M方法例項詳解

2022-10-06 12:06:11 字數 2218 閱讀 5358

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模型類,uimsqzdn並操作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/twww.cppcns.comhinkphp';

則可以使用:

$user = m('user','think_','db_config');

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

$user = m('commonmodel:db2.user','think_');

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

m('userlogic:user');

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

d('user','logic');

實現同樣的功能。

本文標題: thinkphp之m方法例項詳解

本文位址: /wangluo/php/109757.html

ThinkPHP之A方法例項講解

thinkphp的a方法用於在內部例項化控制器,其呼叫格式為 a 專案 分組 模組 控制器層名稱 最簡單的用法 user a user 表示例項化當前專案的useraction控制器 這個控制器對應的檔案位於lib action useraction.class.php 如果採用了分組模式,並且要例...

ThinkPHP函式詳解 M方法

thinkphp函式詳解 m方法 m方法用於例項化乙個基礎模型類,和d方法的區別在於 1 不需要自定義模型類,減少io載入,效能較好 2 例項化後只能呼叫基礎模型類 預設是model類 中的方法 3 可以在例項化的時候指定表字首 資料庫和資料庫的連線資訊 d方法的強大則體現在你封裝的自定義模型類有多...

ThinkPHP函式詳解 M方法

m方法用於例項化乙個基礎模型類,和d方法的區別在於 1 不需要自定義模型類,減少io載入,效能較好 2 例項化後只能呼叫基礎模型類 預設是model類 中的方法 3 可以在例項化的時候指定表字首 資料庫和資料庫的連線資訊 d方法的強大則體現在你封裝的自定義模型類有多強,不過隨著新版thinkphp框...