ThinkPHP, Django這兩個架構孰優孰略,忽略語言本身?
ThinkPHP, Django這兩個架構孰優孰略,忽略語言本身?
最後更新:2016-06-17
來源:互聯網
上載者:User
創建阿里雲帳戶,並獲得超過 40 款產品的免費試用版;而企業帳戶則可以享有總值 $1200 的免費試用版。立即註冊!
幫忙從易用性,拓展性分析下
回複內容:你問 ThinkPHP 適不適合(零基礎)速成找工作,沒問題;你問 ThinkPHP “好不好”,也就算了。和 Django 對比,還有人覺得 ThinkPHP 好,我真的要出來說一句了—— 技術角度上,ThinkPHP 無論如何也配不上和 Django 對比。
ThinkPHP 的代碼品質非常一般,風格尤其糟糕——大量單字母命名、全域函數、全域變數(還有組合體——單字母全域函數)、濫用 GET / POST 數組……比如想象一下表單裡用了個單字母的key(出於混淆或壓縮 URL 的目的),結果行為莫名其妙,最後發現這玩意兒竟然是架構預設的全域 GET 參數之一……最關鍵的是,這些還是他們引以為豪的特性!暴露給開發人員的公開介面都這樣了,架構內部就更不用說——隨處可見“縮行”神技、沒有統一的代碼規範、對 PHP 的類型轉換帶來的坑不注意規避……
安全方面也尤為堪憂。且不說編碼品質導致的細節漏洞,整個 SQL query builder 的設計簡直令人嚇掉下巴!最早我也沒關注,還覺得作為一個現代架構(ThinkPHP 3.X),善用 prepared statement 、 parameterized query 應該是基本的,有可能的話還應該做好類型綁定(尤其在動態語言裡),然而……直到我看到烏雲上接二連三的爆出 ThinkPHP 的 SQL 注入漏洞(現在應該有很多都已經公開細節了,可以自己去搜搜看),修了一個甚至還間接導致 regression 出了個新的,覺得一個架構怎麼這麼容易被注入,我才去看了一眼那幾個修複的 patch 以及整個 SQL 子系統,嚇得我……官方甚至還有過類似“就是這麼設計的”、應該開發人員自己應對的回應——這話很多時候是對的,但我可一點也不覺得傳任何值給
query builder (而且也沒有強制使用“unsafe”之類的功能)導致注入是開發人員應該應對的問題……
說到了 regression ,也就不得不提最關鍵的一點——測試在哪裡?反正我是一點也不敢使用一個這麼龐大卻沒有單元測試的架構的……( Knuth 的 TeX 都有測試呢……又不是編程之禪裡的“大師”……)
另外有一個可以討論的問題——升級。我是做過從 ThinkPHP 1.X 升到 2.X 再升到 3.X 的事情的。介面、行為甚至整個結構、模型都會變化,還記得升級文檔是一份不厚的PDF,有很多細節沒有完全覆蓋到。和 Django 對比,即使是 Django 早期變化比較大的時期,也沒覺得升級這麼痛苦,大部分時候還會提前幾個版本給 deprecated 警報……更不用說 Django 最近很長一段時間的升級都比較平滑了,這也和其架構合理有關。當然你也可以支援這種破壞性比較大的升級,前提是你願意花時間跟進大版本,否則老版本最後總是會沒有安全支援的——看看現在多少舊版本的 ThinkPHP 網站被指令碼小子拿來玩?
ThinkPHP 也是有“優勢”的,從上至下全中文——注釋、commit message、文檔、社區……真的幾乎一句英文也沒有(當然拋開代碼),想要也沒有,掃清了需要學英語這一大障礙。
我認為,只有出於曆史原因被迫(雖然這種情況下我強烈建議換工作)或者技校速成,其他情況下別碰這個大坑。討論“架構優劣”的話,也是 Laravel、Symfony 之類的 vs Django 更有意義。
Update (a.k.a. off-topic):
有不少人提到 CodeIgniter ,也是我用過的第一個架構,同時也是我讀過的代碼比例最高的一個PHP架構。中肯地說 CodeIgniter 的設計、架構乃至代碼品質都是不錯的,文檔也很易懂。不過不論如何 CodeIgniter 的定位和 ThinkPHP 這類完全不同,就是一個輕量級的架構,最重要的區別之一在於資料層抽象非常簡單。更不幸的是其開發停滯了很長一段時間,尤其是在 PHP 5.3 之後沒能跟上(不但沒有使用新特性,而且還存在相容問題)……不推薦在新項目中使用 2.x 的 CodeIgniter ( PHP 5.3 之後有太多重要的新特性了)。至於前段時間 CodeIgniter 轉讓給了我這兒的一所 college (BCIT)來維護,推出了 3.x 版,沒有用過就不評論了。
還有一個曾經很喜歡的架構是 CakePHP ,代碼規範、測試完整、團隊活躍,很喜歡它的資料模型,算是少數幾個 ORM 做得不錯的 PHP 架構了,調試功能也很強大,再加上自動產生代碼和資料庫等“scaffolding”功能,可以說是比較接近 Django 。然而可惜的是,我最喜歡的 data model 部分在 2.x 版本的實現有問題——曆史包袱沉重、邏輯過度複雜,導致在極端情況下(例如複雜的層疊、連結)出現 bug ,而且很難修;我花過時間查 bug 、試圖修複、也和 CakePHP 團隊討論了,最後認為很難在不破壞相容性的情況下完全修複,所以留在了 3.x 版本裡重構整個 data model 系統。如今 3.0 好像已經出來了,不過我仍然沒用過……
Laravel 太新、 Symfony 太重,所以這兩個其實我也是沒用過的;Yaf 完全就是不同的方向了。曳引車和車的區別..
過不 國內很多項目的開發環境 就是農田...下面資料的時間點是 20150818
github 上搜尋github 上搜尋
Django
thinkphpthinkphp
完全沒有可比性,think php 不支援 pdo(sql 注入的風險),不支援命名空間, 據說新版本改了,以這種跟進速度,我就不吐槽了laravel 飄過PHP 架構 ,國內用的多的應該是YII吧 忽略語言本身你談個P啊?架構的很多特性就是基於語言特性的。ThinkPHP早就停止更新了,所以喜歡用ThinkPHP的人還是早點換http://asp.net
吧~
國內很多人喜歡用著幾百年前都已經過時的東西,比方說ThinkPHP或者是PHPWind,這樣不好,項目組選架構的時候一定要找有人維護的架構,要不GitHub提一個pull request都沒人理,多鬧心~
Django也是一個挺好的架構,適合初學者我沒有用過TP,但是就我使用TP與YII2的經驗而言。。我不喜歡TP。
= =我看到TP裡面的全域函數 M函數 D函數 就感覺噁心(我是一個物件導向思維者)阿諾,PHP不是最好的語言嗎?只說TP學的蠻快,1上午
本文章原先以中文撰寫並發佈於 aliyun.com,亦設英文版本,僅作資訊用途。本網站不對文章的準確性,完整性或可靠性或其任何翻譯作出任何明示或暗示的陳述或保證。如對該文章有任何疑慮或投訴,請傳送電郵至 info-contact@alibabacloud.com 並提供相關疑慮或投訴的詳細說明。職員會於 5 個工作天內與您聯絡,一經驗證之後,即會刪除該侵權內容。