這是我的真心體會,在嘗試使用Laravel、ThinkPHP、Yii、symfony2、CI、cakephp、Yii2 之后的真實想法(default7#zbphp.com)。
1)ThinkPHP (版本號3.1.3)
我一開始用到的是ThinkPHP 3.1.3,入門門檻就是網址與方法相應這一點。當初我接觸ThinkPHP3.1.3的時候事實上3.2版本號剛出不久,3.2與3.1.x相比是部分重構,用上了最新的命名空間,考慮到購買的虛擬主機可能不支持命名空間(命名空間必須PHP 5.3.3+才支持),也考慮到國內大部分企業假設已經用上了ThinkPHP,肯定也可能不是最新版的,所以一開始選擇的是ThinkPHP3.1.3,用他做了一個站點。整體感覺非常好用,他為你做了盡可能及的一切。並且thinkphp是一家公司在支持,這樣就不會說突然倒閉解散,假設是企業想用PHP來做一個平台的話,非常不錯的選擇,長期穩定。
2)Yii (版本號 Yii 1.1.14)
我學會了ThinkPHP之后,我就想到了再多學一門框架吧,這樣以后找工作也更好一點,談也好談。然后偶然一次我去一家金融方面的公司面試PHP,他們用的是Yii。回來后網上搜索了Yii相關資料,看到非常多人對Yii的介紹稱贊,AR、延遲載入、DAO、L10N、I18N,感覺yii一定非常有前景。便開始研究Yii(Yii 1.1.x)。看手冊,全英文的,偶然有看到帖子說Yii作者是中國人。后來才確認Yii 確實僅僅中國人寫的。看了入門,自己下載下來安裝,感覺以自己如今的水平來說非常難,非常多要記憶的zii widgets,並且耦合度很高,(我剛開始接觸Yii的時候寫的一個看法 http://bbs.csdn.net/topics/390807796)Html模板里面的寫法耦合度更高,便放棄了。
3)cakephp (版本號 2.5.1)
到了這個時候,心里想的是就選一門easy點的框架來說,想到了非常多年曾經就聽過的那一款框架CakePHP(最新版本號cakephp 2.5.1)。下載下來安裝,看文檔不支持命名空間、不用PHP最新的功能方法。看了英文的一部分文檔,非常方便的感覺,對照yii,跟thinkphp一樣有專門講到圖片驗證碼、SESSION、cookie操作,非常類似thinkphp,非常多都為你做好了。然后我下載來做自己的一個站點,我一開始就先做管理員部分,結果就發現,依照cakephp 的思路,管理員和前台事實上應該是在一個文件中面的。比方你有一個Post表,那么你的管理員和前台的針對Post的操作所有都是在PostController里面,而我期待的是必須前后台分離,沒有耦合。
4)symfony2(symfony 2.5)
假設不是一本書上介紹到symfony,而且對他有非常多非常好的評價,我想我絕對特不會知道並關注symfony2的。開始接觸symfony2,發現他安裝方法跟我曾經接觸到的PHP全然不一樣,composer安裝,非常新穎,這全然顛覆了我曾經對PHP的某些認識。Symfony2必須在PHP 5.3.3以上的版本號,事實上如今再去看,是必須PHP 5.4+以上版本號,由於他里面的一些組件component要求的是最新版本號,由於我寫這篇文章的時候,我對這些框架的接觸都是在數個禮拜之前,而這一段時間看的框架太多,可能有點混淆,假設有紕漏,或者探討能夠發郵件 default7#zbphp.com。安裝好了symfony2之后,細致閱讀symfony2的內容,他最大的特點就是將一整套程序的執行對照成電腦計算機的Input+Output+CPU。Request Resonse 和 PHP處理部分(事實上這種思路后來其它的框架Yii laravel cakephp 3.x全都借鑒了)。我再繼續閱讀symfony2的文檔,他里面不會像thinkphp那樣講圖片驗證碼、IP、IP歸屬地怎么查詢、圖片怎么上傳處理之類的,搜索非常多相關資料,感覺symfony2是一個HTTP框架,可是並非MVC框架,而是一個HTTP框架。他有C 和V,可是沒有M。思路跟yii thinkphp全然不一樣的,組件化component的思想,跟Ror的不論什么都是對象的思路不一樣,他是不論什么都是組件,低耦合。
5)Laravel (Laravel4.2)
我繼續搜索PHP MVC Framework方面的帖子,找了非常久,看到有一篇文章上配了一張圖(上面那一張),說截止到2013年年底,Laravel占有率是最高的!然后便去了解laravel,百度搜索Laravel,已經有蠻多站點了,比方 www.golaravel.com,介紹laravel框架,文檔,介紹到Restful功能、是企業級框架。
事實上我一直以來都想找一個這種框架,長期、穩定,不會一下子就解散了不支持了,不會說今天一變明天一變。並且有命名空間最新的幾個功能得有,能夠省去以后常常重構麻煩。下載安裝laravel,也是composer方式安裝。然后開始用了,發現他官方上一直非常推崇的路由功能,使用起來卻非常繁瑣。每一條請求網址都要寫一條路由。想到這里認為不敢想像,一個站點的網址非常多的,並且不同樣的規律,包含管理員后台,假設這樣每一條網址都要寫一個路由,並且所有都是些到routes.php這一個文件中面去,你想象一下,載入要耗費多少資源時間???並且描寫敘述上說的文檔豐富,可是看到了真的非常少,不齊全(對照symfony cakephp,他的文檔真少)。
6)又一次回到Yii(Yii 2.0)
事實上我這一陣子一直都在尋找一款MVC框架,支持命名空間、支持AR、方便好用,有圖片驗證碼自己主動生成、圖片上傳處理,水印處理,支持I18N,多語言、有非常多人在使用、成熟的文檔、穩定長期、適合企業級。最后對照了這么多框架還是回到了最開始想到的那幾個框架,又一次回到Yii。想到自己為什么一開始就認為Yii不適合,但去對照了其它框架,才發現Yii是差點兒最好的,追求的是運行效率、速度(當然相對)。
對照了這么多框架,發現一個現象,中國的程序和國外的程序猿的思維不同點,中國的程序猿是看錢包點菜,外國的程序猿全然是看自己喜好來點菜。用第二種說法來講,中國的程序猿是努力去適應環境,而國外的程序猿是努力改變環境。怎么來說,相同一個需求項目,中國程序猿首先考慮到的是server支持嗎?版本號支持嗎?承受得了多少訪問?配置方面的限制怎么樣,怎么樣執行最快,國內90%以上的PHP程序都是執行在虛擬主機上,一台server數百個甚至數千個站點。而國外的程序猿全然不須要考慮這些,他們依照自己的思路來,全然不考慮配置,他應該認為怎么樣一個架構思路,而不用去關心機器怎么樣執行最快,人來決定架構,而不是機器配置決定架構,有種非常文藝的感覺。
比方Laravel,他里面每個網址就必須寫一個路由,這全然是不考慮server性能,如果整個站點有3000不同形式的個網址,那一次性載入得多少耗費??還有國外比較流行的程序Drupal,也是全然不計較server的配置,而是單純從人的思考的角度去規划的,他將全部的內容全都想象成節點,key-val的形式,徹底忽略配置的限制。我在本地機子(雙核CPU 6G內存)的電腦上執行drupal都卡得無法形容,更別提上傳到server。(文 bydefault7#zbphp.com)
==============2014-6-22補充一下=================
補充一下,美國的主機上dreamhost提供的PHPserver是支持最新版的PHP的,后台能夠自由切換。所以支持全部最新框架。