ThinkPHP中實例化對象M()和D()的區別
在實例化的過程中,經常使用D方法和M方法,這兩個方法的區別在于M方法實例化模型無需用戶為每個數據表定義模型類,如果D方法沒有找到定義的模型類,則會自動調用M方法。
通俗一點說:
M實例化參數是數據庫的表名。
D實例化的是你自己在Model文件夾下面建立的模型文件
例如:$user = new UserModel();
等價于$user = D('user');
如果實例化的是一個空模型
例如 $Demo = new Model();
那么它等價于 $Demo = M();
D和M的區別主要在于:
M方法不需要創建模型類文件,M方法不會讀取模型類,所以默認情況下自動驗證是無效的,但是可以通過動態賦值的方式實現
而D方法必須有創建模型類。
我們可以用下面兩種方法去創建一個數據表的映射對象
第一種:$Test = D('Test')
第二種:$Test = new Model('Test')
雖然這兩種都可以對數據進行select,insert,delete,udpate操作,在
數據驗證上有很大的不同,用第一種方式實例一個模型就會有數據檢查功能,如果 title 沒有填寫的話就會提示 “請輸入標題” (這個是tp提供的一個自動驗證功能,當然也需要在相應的model中定義好驗證條件);
如果用第二種就沒有了·····
還有1個區別就是當用了$trueTableName后,必須用$test=d('test'),表示查詢的是test表,
如果用的是$test=m('test'),那么都表示查詢的數據邊是think_test。
thinkphp2.0版本測試有如此上面的問題,D就是實例化一個基于Model文件的Model。M則是通過直接實例化Model方法(ThinkPHP基類)來動態的實例化一個Model對象,即使這個對應的Model文件不存在。
在實例化的過程中,經常使用D方法和M方法,這兩個方法的區別在于M方法實例化模型無需用戶為每個數據表定義模型類,如果D方法沒有找到定義的模型類,則會自動調用M方法。
通俗一點說:
M實例化參數是數據庫的表名。
D實例化的是你自己在Model文件夾下面建立的模型文件
例如:$user = new UserModel();
等價于$user = D('user');
如果實例化的是一個空模型
例如 $Demo = new Model();
那么它等價于 $Demo = M();
D和M的區別主要在于:
M方法不需要創建模型類文件,M方法不會讀取模型類,所以默認情況下自動驗證是無效的,但是可以通過動態賦值的方式實現
而D方法必須有創建模型類。
我們可以用下面兩種方法去創建一個數據表的映射對象
第一種:$Test = D('Test')
第二種:$Test = new Model('Test')
雖然這兩種都可以對數據進行select,insert,delete,udpate操作,在
數據驗證上有很大的不同,用第一種方式實例一個模型就會有數據檢查功能,如果 title 沒有填寫的話就會提示 “請輸入標題” (這個是tp提供的一個自動驗證功能,當然也需要在相應的model中定義好驗證條件);
如果用第二種就沒有了·····
還有1個區別就是當用了$trueTableName后,必須用$test=d('test'),表示查詢的是test表,
如果用的是$test=m('test'),那么都表示查詢的數據邊是think_test。
thinkphp2.0版本測試有如此上面的問題,D就是實例化一個基于Model文件的Model。M則是通過直接實例化Model方法(ThinkPHP基類)來動態的實例化一個Model對象,即使這個對應的Model文件不存在。
樂發網超市批發網提供超市貨源信息,超市采購進貨渠道。超市進貨網提供成都食品批發,日用百貨批發信息、微信淘寶網店超市采購信息和超市加盟信息.打造國內超市采購商與批發市場供應廠商搭建網上批發市場平臺,是全國批發市場行業中電子商務權威性網站。
本文來源: ThinkPHP中實例化對象M()和D()的區別