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