在thinkphp中,m方法用於範例化一個基礎模型類,m方法是通過直接範例化Model方法,來動態的範例化一個Model物件,即使這個對應的Model檔案不存在,語法為「$User=M(模型名稱,資料表字首,當前使用的資料庫連線資訊);」。
本文操作環境:Windows10系統、ThinkPHP5 版、Dell G3電腦。
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');
實現同樣的功能。
推薦學習:《》
以上就是thinkphp5.0中m方法怎麼用的詳細內容,更多請關注TW511.COM其它相關文章!