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