來源:互聯網
上載者:User
關鍵字
thinkphp
thinkphp5
php
學完了 thinkPHP C和V 最後看的 操作資料庫,
之前學的PHP內建的PDO,感覺也會用了,
現在thinkPHP 也自己帶了一套 操作資料庫的 類。
我看了看教程,再學習也挺繁瑣哦的。。
各種傳值格式又都得記,本來學了class MySQLi,後來知道都用pdo,又學了pdo,現在又一個M。。。我都快學串了。
我問問這個thinkPHP 的大M 方法,在你們做項目用的多嗎?
比pdo 的方便嗎?
我還學習嗎。。
回複內容:
學完了 thinkPHP C和V 最後看的 操作資料庫,
之前學的PHP內建的PDO,感覺也會用了,
現在thinkPHP 也自己帶了一套 操作資料庫的 類。
我看了看教程,再學習也挺繁瑣哦的。。
各種傳值格式又都得記,本來學了class MySQLi,後來知道都用pdo,又學了pdo,現在又一個M。。。我都快學串了。
我問問這個thinkPHP 的大M 方法,在你們做項目用的多嗎?
比pdo 的方便嗎?
我還學習嗎。。
我沒用過TP,不是很清楚裡面的M是什麼,但是還是能指出:你理解有誤,這是兩件事情。
學PHP的人肯定都要會用PDO或者Mysqli,這根本不存在學習的問題,文檔就在那裡,會用就行,需要花時間學習的是SQL文法。
而M阿D阿這種東西是另外一層封裝,它們通常用來解決以下問題:
1- 寫sql很麻煩(例如欄位清單),越長的sql維護起來也越麻煩
2- 拼湊sql的時候更麻煩
3- 不同的人寫的sql不同,造成表、欄位別名不一致,容易帶來問題
4- sql注入
5- 等等
對於相同功能,PDO方式可能如下:
$db = new PDO();$row = $db->query('SELECT * FROM `users` WHERE `id` = 5')->fetchRow();
使用M的話可能會類似:
$row = M('User')->where(array('id' => 5))->findRow(); //M('User')可能等效於new User,而User是一個繼承與Model的類
簡短的說,各種架構都想了各種方法避免開發人員用直接寫SQL語句的方式訪問資料庫,明白這個原理就行了,不需要特別的學習什麼,需要的時候查手冊就好了,沒必要記住。而且這種東西出了問題一樣是SQL異常,必須掌握SQL文法才能解決問題。
你看了文檔之後就會感覺用起來很方便啊,大哥,架構的意義在哪裡?!不就是讓你少寫代碼嗎!話說tp 3.2.3資料庫驅動用pdo重寫了(完全基於pdo的)
你既然要用Thinkphp架構了肯定首選使用M或者D方法啊!
thinkphp裡面有兩種模型調用方式,M()和D(),比如操作使用者表:
M('user')->add(array('name' => 'zhangsan'));D('**U**ser')->add(array('name' => 'lisi'));
注意D('User')中user首字母大寫。兩者的區別是,D()可以由你自己撰寫擴充的模型操作,而M()是thinkPHP內建的方法,也就是說D()可實現功能擴充,而M()功能不可擴充,效能上D()也就比M()弱了一些。
你學PHP當然要對pdo和mysqli方法都有所瞭解,但是在具體的項目中,用thinkPHP封裝好的方法去操作就好了。
我用D比較多
幾乎每個項目中都會使用到資料庫,而在ThinkPHP
此類架構中,一般是將一張表封裝成一個對象,而在php中,對象的執行個體化是需要new類的,代碼類似於
//類似於這種MysqlTableClass $obj_Table =new MysqlTableClass('db_name','table_name');obj_test=$obj_Table->getOne();
而ThinkPHP
的M
函數(這裡我不得不糾正下你的說法了,類中的才叫方法,這個M位於公用函數裡,所以只能叫函數),封裝的就是上面的new操作,返回的直接就是一個對象。
技巧拓展
建議不要使用M
方法,因為當你後期需要添加自訂模型的時候,M
方法還得一個個的改成D
,非常麻煩,而如果你直接使用D
方法,則可以避免此類問題。
綜上
直接使用D方法即可,本質上就是一個封裝而已~