標籤:

PHP 的哪個 MVC 框架值得推薦?


!--------------- created at 2014-08-23 ---------------
二話不說先來一個 Github 上 PHP 開源項目的排名 Search · stars:&>0 · GitHub , 好有個概念.

大家的回答都比較老了, 現在是 2014 年 8 月下旬, PHP 最近這幾年還是發生了很多變化, 尤其是 Laravel 的出現, 讓很多已經開始放棄 PHP 的人又從新回到 PHP 的懷抱. 離開 PHP 是因為覺得社區就是一盤散沙, 大家各種為戰, 當我想學個框架, 來提高生產效率的時候, 上 Google 一搜, 出來的就是

  • 50個你必須了解的 PHP 框架&>
  • &<10個最有名的 PHP 框架&>....

真的很嚇人, 這麼多的框架, 我無從入手.

最後我下定決心, 把每一個框架都學習一遍, 真正在學習的時候, 頭又大了, 每一個框架都有不同的代碼規範, 不同的架構, 不同 "功能一樣調用方式不一樣的函數方法" , 可以這麼說

每一個框架都在發明屬於自己的語言

在學到第五個框架的時候, 我就決定放棄了, 因為, 我覺得, 我雖然年輕, 但是不至於時間如此廉價的浪費掉.

後來一直聽說 Ruby 社區有一個叫 Ruby on Rails 的 Web 框架, 是全世界最好的框架, 為了用上最好的框架我開始學習 Ruby 直到接觸 Rails, 還記得第一次用 Rails 寫 Demo App 的時候, 熱淚盈眶呀, 多麼好的設計, 並且最重要的, Rails 的社區是如此理智, 大家喊得口號是

  • Convention over configuration;
  • DRY - Don"t Repeat You;
  • KISS - Keep it simple and stupid;
  • Don"t reinventing the wheel;
  • Optimized for programmer happiness and sustainable productivity

多麼智慧, 多麼聰明, 又是多麼簡單的一些想法, 我瘋狂的愛上了 Rails.

2012 年末, 無意間在 Tuts+ 網站上看到 Jeffrey Way 的一套 Laravel 3 Essentials ( 注意: Laravel 現在已經是 Laravel 4 了, 這套課程已經 out dated 了 ) 課程, 看完以後對 Laravel 印象深刻, 從那會就一直留意 Laravel 的發展.

2013 年 6 月份, Laravel 4 發布, 集成了 Composer, 框架的可擴展性極高, 還有 100% full testing coverage.

關於 Laravel 4 的好, 我在這個問題裡面已經講了 最好的 PHP 框架是什麼?為什麼? , 就不複製過來了.

Laravel China:
Laravel China is ready Laravel 中文文檔 , 歡迎發起 issue 提交紕漏 和建議 --&> Laravel China · GitHub

PHPHub:
最後對 PHP Laravel 的愛好者喊一句, 我抽空弄了個社區, 歡迎加入一起討論技術, 一起成長.

PHPhub - PHP Laravel的中文社區 一個乾淨, 純粹的, 積極向上的 PHP 中文社區
網站是使用 Laravel4 編寫的, 代碼基於 MIT Licence 開源 summerblue/phphub · GitHub , 歡迎大家貢獻代碼.


yii的設計風格是我要解決一個問題,我考慮到這個設計模式可以,但是我封裝好了固定的方法,所以你無需知道我用了啥模式,你只需要調用我提供的方法就行。可能後期覺得裡面有的設計模式不夠合理,要換個別的模式,做個調整,但是你不用擔心,方法的用法不變。而且為了後期設計模式調整方便,設計模式的名稱很少出現在類中,類的命名盡量具象方便大夥理解。

laravel的設計風格是我要用這個設計模式,我看了一圈,發現這個設計模式能夠解決這些問題,好,所有這些問題的方法都用這個設計模式重新寫一遍,方法使用方式都得換成這個這個設計模式規定的方式,你們要學會新的使用方法。並要記住這個設計模式的名稱,於是laravel增加了一個新名詞,一些類直接帶上了設計模式的單詞。過後不久,Laravel發現一個更酷的設計模式,於是又看了一圈發現上次解決的那些問題,這個設計模式不是剛好能用么。於是又把上次那幾個問題的方法用這個設計模式重構了一遍。所有用法必須按這個設計模式規定的用法來。於是laravel不斷重構,方法的用法不斷改變,不斷增加新的名詞。

phper高聲嚷到「你一定又改用法了!" laravel 睜大了眼睛說「你怎麼這樣憑空污人清白……」「什麼清白?我前天親眼見你改了路由。」laravel 便漲紅了臉,額上的青筋條條綻出,爭辯道,「重構不能算改……重構!……優化代碼的事,能算改么?」接連便是難懂的話,什麼「Contracts」,什麼「優雅」之類,引得眾人都鬨笑起來:社區內外充滿了快活的空氣。


Kohana(http://kohanaframework.org/)是我最喜歡的框架,個人從中學習了很多,它的文件系統和結構非常清晰,擴展靈活,安全,HMVC,大量使用了PHP5的新特性,代碼非常優雅,文檔也不錯。

我個人寫的超輕微框架也要發布了。


問這個問題的人想必實戰經驗不多,或者對MVC框架不太了解,以為MVC框架很重要。

做項目是可以不用框架的,PHP原生就能解決很多問題,用框架在很多時候更啰嗦,MVC的框架還會使項目或網頁打開更慢。

MVC框架並不是必須有的東西,自己就能寫。

越是強大的框架,手冊就越複雜,干涉就越多。

之所以現在企業用各種框架,樓上很多人提到thinkphp,ci,laravel,yii等等,這只是因為PHP原生的寫法適應不了大規模的協作製作項目,需要用框架統一規範下。用的人越多就越主流。

而不在於哪個更強大更好用,都差不多,就看誰家的手冊規範,手冊越規範越清晰就越容易易學,就容易普及。


最近看了幾個框架源代碼,包括流程,設計思想,自動載入,路由分發。

根據特點推介幾個框架

1、Laravel,laravel這個框架很有意思,定時任務,數據遷移,大概你能在web中想到的功能這個框架都可以提供,它的路由借鑒了Ruby on Rails 和Python的flask框架,但是還提供了web方面其它的一些功能,你可以把它想像成PHP中像Java一樣強大的Web中的瑞士軍刀,前提是你不考慮性能,因為它的實現使用了大量的閉包和反射,大概在PHP里嚴格引入設計模式的也只有這個了。
生產效率:5星
學習難度:5星(5星為最難,學習成本最高,下同)
性能:2星
社區活躍:4星(社區活躍可以很方便的找到別人已經開發的功能,專指中文文檔,組件豐富性)

2、ThinkPHP5,大概3年前研究過TP3源碼,使用起來簡單,因為自動載入的問題,性能是個坑,現在發展到5,個人認為已經是一個相當優秀的框架了,路由定義簡單,配置簡單,文檔豐富,社區也相當活躍
生產效率:5星
學習難度:1星
性能:4星
社區活躍:4星

3、Yii2,Yii2的路由分發跟TP5稍微有點不一樣,也使用了反射的功能,自動載入現在都使用的composer,大體上都差不多,都有延時載入,Yii2的路由相對智能一些,不用去手動維護,類似於TP3所以使用起來也是很方便,性能比TP5應該略差點,沒測試過,從源碼來看

生產效率:5星
學習難度:2星
性能:3.5星
社區活躍:4星(很多強大的組件,你只要下載就行了,會省很多事)

4、CakePHP,這個框架內部的封裝性看上去沒上面那幾個優美,但是它自己實現了use關鍵字功能,所以兼容性來看應該是比上面那幾個好點的,但這在新項目上應該不是問題,新項目上PHP7,啥都別想,准沒錯。它的路由定義類似於TP5但是稍微多點功能,不過其實是個雞肋。中文文檔就不說了,很不好找。不過也算是個相對簡單的框架嚴格遵循MVC

生產效率:3星
學習難度:3星
性能:4星
社區活躍:2星

5、Workman,這個框架相當強大,如果你要實現一些複雜的協議或者用php做一些websocket推送或者TCP/UDP伺服器的話,這個框架可能可以滿足你的需求,也有一些非同步的組件,比較高級的框架,初中級程序員可能用不上
生產效率:3星
學習難度:4星
性能:3星
社區活躍:2星

6、swool,這是個相當有意思的框架,性能很強大,旁友,你聽說過非同步編程的nodejs,python的tornado框架嗎,這個在php里做的就是一個這樣的事情,國內的一位老兄開發的C擴展,用php來非同步編程,看了下文檔,稍微做了個性能測試,相當優秀,就是不知道在項目中重度使用會不會踩到什麼坑,而且這也是一個相當高級的框架。大部分人可能直接轉node了吧,畢竟node生態環境已經相當好了,總之,如果你想用php試試非同步編程來提高性能,非這個框架莫屬。性能獨一檔,編程難度也相對高一些,你需要有些進程的理論基礎
生產效率:3星
學習難度:4星
性能:6星
社區活躍:2星

7、Yaf,鳥哥寫的c擴展框架,然而你要自己實現很多輪子,生態環境是個大問題。
生產效率:4星
學習難度:4星
性能:5.5星
社區活躍:2星
其它框架還沒怎麼了解,國內的話,根據具體業務,選上面幾個,沒錯。

以上性能均為橫向對比,實際上如果以運行效率來看的話Yaf和swool高其它很多,畢竟接近原生的水平,swool因為非同步在多連接,高並發的情況下,甚至會比原生的更高。


CodeIgniter
中文資料相對比較齊全 簡潔 易學 可擴展性強


我推薦兩個國內的吧,開源的thinkphp和快速部署的speedphp(已經有人移植到sina 的sae上了)。國外的去google一下,有很多優秀的,但文檔方面可能需要一些英語底子,畢竟很多翻譯工作很難跟進,建議直接看英文文檔。


個人覺得不太大的項目,可以用現有的流行框架,也可以自己寫個簡單的MVC框架即可,可以做得比較靈活、輕量,出現問題也能靠自己(團隊)完全掌控。

而比較大的項目,更應該由自己開發框架,框架的開發並不是增加工作量,而是幫助你更好的理解、把握自己系統的整體架構,在底層框架的改進也問題解決上,肯定也是更容易的。

綜上,我目前並不是太推薦用現有框架,除非比較小、開發周期短的項目,而選擇框架我覺得不是看它功能有多強大,大部分還是大同小異的。值得關注的一點是框架所約定的編碼規則,不要把程序的代碼搞複雜、搞亂。而自己做框架的話,也肯定是必須參考N多框架的,甚至可以完全模仿一個出來。
我最近比較感興趣的一個框架是Kohana


提到框架就得是MVC嗎,Laravel5已經不算是MVC了


理性上我推薦你用yii,
感性上我推薦你用fyscu,哈哈我自己寫的。http://fyscu.lanhao.name


先使用 ThinkPHP 3.2 用作初期使用,做一個完整的產品出來,在使用的過程中要閱讀它的源碼,最好是自己能去改,因為TP是基於php 5.2設計的,與php 5.3之間的差距還非常大,所以儘可能的按照php 5.3的方式來改TP,改的過程中,自然而然能理解TP的設計原理和一個PHP框架所該有哪些功能。

然後就去使用Laravel 4,因為他語法簡潔,使用composer,命名空間等,對於PHP所完成的功能塊也清晰。

最後去使用 Smyfony,因為這個框架非常的強大,他會帶給你一個完善和爽快的新世界(前提當然是你能充分地理解它的設計目的)。

在使用這三個框架時,你就會充分的理解出他們分別的設計目的和針對的開發團隊層次了。

而決定於用哪個,便是由你的項目大小、參與人數、開發者素質多方面決定的了。


  1. 入門級別推薦Codeigniter。因為它比較容易上手,有很棒的文檔,有中文社區,但是它也有不好的地方,一是Codeigniter不算是完全的OO框架,二是對更大一點的項目而言,功能薄弱了一點,需要自己去拓展。
  2. 功能稍微強大一點的,推薦Yii。它比Codeigniter要複雜一些,文檔沒Codeigniter的好,所以花的力氣要大一些。

個人感覺是,不要太早就上框架,打好基礎還是很重要的。
smarty只是模板引擎,應該還算不上是框架吧?


用過幾個小框架。我們的項目用的是zentaoPHP,原本的框架很小,同事們進行了大量的擴充。


國內的ThinkPHP不錯。CI官方已經不再維護了。最近看好的是Laravel


自己寫


看需求把,小的就CI
大的就yii
如果想得心應手,可以自己寫個


國外的CodeIgniter,國產的ThinkPHP
看過許多框架,有些確實強大,但是非常繁瑣難懂,比較容易上手的應該屬ThinkPHP了
如果你英文閱讀能力過硬,還是建議使用國外框架,他們通常強大和健壯的多,缺點就是出現問題的時候你只能在英文世界尋找答案


Slim框架,一個非常輕量級但是非常靈活的框架,幾乎是提供了一個基本功能和一個殼子而已,但是也反映了現代PHP框架發展的趨勢。
1)遵守PSR規範,PHP框架開始受束縛,有些類必須使用PSR介面實現,這一點很重要
2)提供容器,在容器上注入PHP組件驅動,比如路由驅動,ORM驅動,而這些都有現成很好用的組件,composer安裝即可
3)中間件支持,完美的擴展PHP處理請求到相應的中間事件
所以Slim並沒有設計得太複雜,只是實現了基本的請求,響應,中間件,路由還是用的第三方類庫驅動nikic/fast-route來驅動,連ORM都沒有提供。但是,這並不妨礙Slim構建強大的應用,就像你組裝一台電腦,在Slim的主板上,你可以插入你認為性能好的CPU。


Zend


如果是剛入門,推薦ThinkPHP,文檔比較全,社區也比較活躍
如果是中級,想學習框架的開發,準備自己搞框架,推薦ZendFramework,畢竟是PHP官方的框架,裡面的設計思想還是值得學習的。
如果是骨灰級,建議研究下yaf,個人覺得能把框架編譯到PHP擴展裡面,性能上沒得比啊。


推薦閱讀:

YII 框架的優點有哪些?
怎麼在網上找到簡單的 PHP 實例?
如何從頭開始學習 PHP?看教程,從 WordPress 入手怎麼樣?
關於 PHP 的好書有哪些?

TAG:PHP | PHP框架 | MVC |