ThinkPHP函數(shù)詳解:M方法M方法用于實例化一個基礎(chǔ)模型類,和D方法的區(qū)別在于:1,、不需要自定義模型類,,減少IO加載,性能較好,; 2,、實例化后只能調(diào)用基礎(chǔ)模型類(默認(rèn)是Model類)中的方法; 3,、可以在實例化的時候指定表前綴,、數(shù)據(jù)庫和數(shù)據(jù)庫的連接信息; D方法的強(qiáng)大則體現(xiàn)在你封裝的自定義模型類有多強(qiáng),,不過隨著新版ThinkPHP框架的基礎(chǔ)模型類的功能越來越強(qiáng)大,,M方法也比D方法越來越實用了。 M方法的調(diào)用格式: M('[基礎(chǔ)模型名:]模型名','數(shù)據(jù)表前綴','數(shù)據(jù)庫連接信息') 我們來看下M方法具體有哪些用法: 1,、實例化基礎(chǔ)模型(Model) 類 在沒有定義任何模型的時候,,我們可以使用下面的方法實例化一個模型類來進(jìn)行操作: //實例化User模型 $User = M('User'); //執(zhí)行其他的數(shù)據(jù)操作 $User->select();這種方法最簡單高效,因為不需要定義任何的模型類,,所以支持跨項目調(diào)用,。缺點也是因為沒有自定義的模型類,因此無法寫入相關(guān)的業(yè)務(wù)邏輯,,只能完成基本的CURD操作,。 $User = M('User');其實等效于: $User = new Model('User');表示操作think_user表。M方法和D方法一樣也有單例功能,,多次調(diào)用并不會重復(fù)實例化,。M方法的模型名參數(shù)在轉(zhuǎn)換成數(shù)據(jù)表的時候會自動轉(zhuǎn)換成小寫,也就是說ThinkPHP的數(shù)據(jù)表命名規(guī)范是全小寫的格式,。 2,、實例化其他公共模型類 第一種方式實例化因為沒有模型類的定義,因此很難封裝一些額外的邏輯方法,,不過大多數(shù)情況下,,也許只是需要擴(kuò)展一些通用的邏輯,那么就可以嘗試下面一種方法,。 $User = M('CommonModel:User');改用法其實等效于: $User = new CommonModel('User');因為系統(tǒng)的模型類都能夠自動加載,,因此我們不需要在實例化之前手動進(jìn)行類庫導(dǎo)入操作。模型類CommonModel必須繼承Model,。我們可以在CommonModel類里面定義一些通用的邏輯方法,,就可以省去為每個數(shù)據(jù)表定義具體的模型類,,如果你的項目已經(jīng)有超過100個數(shù)據(jù)表了,,而大多數(shù)情況都是一些基本的CURD操作的話,,只是個別模型有一些復(fù)雜的業(yè)務(wù)邏輯需要封裝,那么第一種方式和第二種方式的結(jié)合是一個不錯的選擇,。 3,、傳入表前綴、數(shù)據(jù)庫和其他信息 M方法有三個參數(shù),,第一個參數(shù)是模型名稱(可以包括基礎(chǔ)模型類和數(shù)據(jù)庫),,第二個參數(shù)用于設(shè)置數(shù)據(jù)表的前綴(留空則取當(dāng)前項目配置的表前綴),第三個參數(shù)用于設(shè)置當(dāng)前使用的數(shù)據(jù)庫連接信息(留空則取當(dāng)前項目配置的數(shù)據(jù)庫連接信息),,例如: $User = M('db2.User','think_');表示實例化Model模型類,,并操作db2數(shù)據(jù)庫中的think_user表。 如果第二個參數(shù)留空或者不傳,,表示使用當(dāng)前項目配置中的數(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');表示基礎(chǔ)模型類用Model,,然后對think_user表進(jìn)行操作,用user_a賬號進(jìn)行數(shù)據(jù)庫連接,,操作數(shù)據(jù)庫是thinkphp,。 第三個連接信息參數(shù)可以使用DSN配置或者數(shù)組配置,甚至可以支持配置參數(shù),。 例如,,在項目配置文件中配置了: 'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';則可以使用: $User = M('User','think_','DB_CONFIG');基礎(chǔ)模型類和數(shù)據(jù)庫可以一起使用,例如: $User = M('CommonModel:db2.User','think_');如果要實例化分層模型的話,,利用公共模型類的方式,,我們可以使用: M('UserLogic:User');來實例化UserLogic,雖然這樣做的意義不大,,因為可以用 D('User','Logic');實現(xiàn)同樣的功能,。 |
|