PHP從誕生以來就受到廣大編程愛好者的喜歡,成為中小站長的好幫手,並培養了大量的PHP編程人員,但是隨著PHP的應用越發廣泛,很多時候已不限於從事中小網站的應用,一些大型PHP項目也屢見不鮮。
當我們選擇PHP開發大型項目時,就不得不考慮開發效率、開發規范、後期維護等問題,這時大家往往會選擇一款人們所認可的開發框架,目前所流行的Zend Framework、Yii、Symfony、CodeIgniter、CakePHP等都聲稱有著開發大型應用的能力。
新框架層出不窮,但當我們真正應用這些框架去實現產品又總是會有各種不同的問題產生:
一、大型框架的背後往往有著較為深厚的結構理論,最熟悉的莫過於MVC、ORM這樣耳熟能詳的理論術語,還有很多深度面向對象方面的知識,但是真正了解這些的人卻為數不多,使得應用門檻急劇攀升;除此大型框架中的應用細節更是紛繁復雜,學習成本也相對較高,這對於原本只是定位中小應用的PHP變得尤為尴尬。
二、PHP做為一門腳本語言,它的運行往往基於宿主進程(如:apache、php-fpm),在單次請求上經歷創建進程、初始化環境、編譯腳本、運行引擎、輸出、資源回收、進程銷毀等一系列過程,在編程語言層面綜合運行效率上要比編譯型語言慢上2-3個數量級,伴隨著消耗大量的系統資源,在此基礎上我們還要搭建及加載復雜的開發框架更是增加了其運行成本。而在大型應用中從不缺乏特殊需求,有時PHP加大型框架的運行效率就是致命的。
三、大型框架所考慮的因素過多,開發人員在應用時需要額外關注代碼以外的細節過多,如:非標准約定、冗長的手冊、瑣碎的配置、復雜的文件目錄結構、難以限制的合理性約束、千姿百態的類庫等等,使得大多數程序員開發過程屢糟困惑,提高開發效率也成了空話。
四、最致命的一點,框架作者不斷地尋找銀彈,試圖制作出一個滿足所有需求的怪物。大型應用對系統的松散耦合性要求很高,通常不可能在開發層面直接對數據進行操作,見一個簡單的SOA模型(附圖),數據層和業務層幾乎是物理隔離的,而在業務層的開發上只針對數據層提供的服務接口進行訪問。從目前的PHP開發框架來說(特別是MVC模型),通常使用ORM來直接對數據庫表進行抽象,並直接加以CRUD操作,靠譜的大型應用是不會這做的(或許適合VPS,但大型應用會選擇VPS ??)。
總結,PHP大型框架真的還處於很尴尬的地位,但是從另一方面來說,好的PHP大型框架真的是一個值得很多人學習的好榜樣,其中蘊涵了大量的設計理念、設計模式、代碼優化、語言特性、軟件工程等知識體系,融匯php精髓但又遠超PHP本身。
最後還是要對這些大型PHP框架說一流行話,“學之者生,用之者死”。
摘自:紅眼技術博客