亂評PHP框架難成大器的三大主因
自從Rails刮起了一陣框架風(fēng),其它語言群起響應(yīng),Java,Python,Scala,PHP,無論靜態(tài)動態(tài)語言都出現(xiàn)了模仿Rails模式的框架出現(xiàn),其中,PHP語言的框架生產(chǎn)力更是***,主流的PHP框架就有超過5種,加上不出名的框架的話,我估計起碼有20多種框架,可怕的數(shù)量!!
PHP框架之路一直充滿著爭議,從PHP要不要用框架,到應(yīng)不應(yīng)該模仿Rails,卻抵不上PHP框架的井噴式的增長,各類框架你方唱罷我登場,網(wǎng)上僅僅是羅列部分框架和簡介就能成為一片文章,名為《國外十大***PHP框架排名》。PHP框架中比較知名的有:CodeIgniter、CakePHP等中小型框架和Zend、Symfony等大型框架。我一直在想為什么PHP的框架數(shù)量如此之多呢?
1. PHP開發(fā)框架太‘容易’了
不要罵我,說實話,PHP開發(fā)Web框架的門檻比起其他的語言,真的要低太多了,PHP本身已經(jīng)有了對Web的支持,要做一個框架,只要先寫一個單入口index.php,然后通過module和action參數(shù)執(zhí)行對應(yīng)的Controller類,和View代碼,一個非常簡單的框架就好了,熟練的程序員一兩天就完成了。如果覺得太簡單,再稍微封裝一下,把$_REQUEST,$_SESSION封裝一下,封裝一下數(shù)據(jù)庫操作等等。到這里一個有模有樣的PHP‘MVC框架’就基本出爐了。熟練一點程序員一周時間搞定了。
相反其他語言,以ruby為例,光是對REQUEST的處理,參數(shù)解析等基礎(chǔ)功能實現(xiàn),就遠(yuǎn)遠(yuǎn)不止一周的工作量,在加上ruby語言的高靈活性和復(fù)雜的語法,使他開發(fā)一款拿的出手的框架所需要的精力是大大的超越一般,開發(fā)框架的門檻低是PHP框架泛濫的因素之一。
2. PHP的封裝能力弱,致使框架的靈活度不夠
這也是事實,PHP的框架很多,但是一般要評估項目,來選擇適當(dāng)?shù)目蚣?,如果是一個簡單的web項目,一般選擇CodeIgniter、CakePHP這類框架,如果是大型的應(yīng)用,也會選擇Zend、Symfony等大型框架,因為你會發(fā)現(xiàn)使用Zend和CodeIgniter完全是兩回事。
也許我說的抽象了,那我舉個例子:在默認(rèn)的PHP環(huán)境中,是沒有AOP功能的,不能對類的已有方法進(jìn)行功能性增強,在需要實現(xiàn)類似功能的情況下,你就需要顯示的修改外面的代碼,非常流行的做法是利用PHP的魔法函數(shù),但是依然需要修改對象的創(chuàng)建方法。
依然對比Ruby,它幾乎是內(nèi)置了AOP支持,可以在完全外部調(diào)用完全不變的情況下完成功能的增強。
在框架的封裝中這種能力的差異就更加的顯著,在PHP中框架復(fù)雜度高也提高了使用者的難度,而不能像Ruby等完全將復(fù)雜性隱藏在框架的內(nèi)部。(說句題外話:javascript也是如此,jquery便是佐證)。
3. PHP的實現(xiàn)機制,使得框架的性能成為詬病
PHP的運行模式,每次request結(jié)束都會完全釋放所有資源,導(dǎo)致框架的加載成為了一個不可忽視的性能累贅,即使你不介意上面提到大型框架的使用復(fù)雜度高,這個原因也讓你不會在中小型項目中輕易使用Zend等大型框架。同時也限制了框架的能力。
據(jù)我分析,正是這三個原因,使得PHP的框架如此之多,但是沒有一個成為真正的主流。這種情況未必是好事,在Ruby中,Rails一統(tǒng),使得Rails社區(qū)***繁榮,很多Ruby高手開發(fā)各種插件增強的它的功能。使得它有著十分良性的發(fā)展。在js框架中jquery也有著相同的經(jīng)歷。
在PHP中,高手則是不停的貢獻(xiàn)它們的新框架,老實說我個人覺得幫助很有限,更是攪渾了這一缸水,其實很多框架完全可以合并為一個發(fā)展,與其出現(xiàn)100個60分的框架,不如出現(xiàn)一個100分的好框架。PHP框架,多的讓我傷不起啊傷不起。
原文鏈接:http://www.iteye.com/topic/1071177
【編輯推薦】