PHP開發框架 Zend Framework 2.0 正式版發布及新功能介紹
著名php開源框架Zend Framework經歷了長達數年的開發,終于在2012年9月5日正式發布了2.0版本,下簡稱ZF2。時隔Zend 1.0版本的發布已經有5年之久。php的框架一直都是百家爭鳴的,但是作為php官方運維的框架,Zend Framework在php開發者中的流行度并不高。其一是由于Zend Framework主要面向大型應用,對代碼規范以及程序結構有嚴格的規定,入門門檻較高。另一方面還是因為Zend Framework整體的執行效率偏低,略顯笨重。
所以Zend小組本次可謂痛定思痛,ZF2并不像其他框架只是修修補補的更新,而是完全重寫了ZF1的所有代碼,主打的口號就是“高性能”。
來看一看ZF2都帶開了哪些新的特性:
1. 模塊化(ModuleManager)
比起ZF1來說,ZF2原生支持模塊的概念,任意第三方php程序,只要遵循Zend的編碼規范和代碼結構,都可以變成一個Zend模塊。目前已經有一批試驗階段的模塊出爐(參看ZF2 Modules)。 其中不乏像Doctrine ORM這樣優秀的項目。
可以預見的是,隨著ZF2的慢慢成熟,越來越多可以選擇的模塊將大量涌現,可能未來基于ZF2的項目開發,會像搭積木一樣輕松簡單。
2. 事件驅動(EventManager)
傳統程序中,代碼都是按線性順序執行的,所以開發中往往很難將一些功能獨立為一個組件或模塊。
事件驅動,或者也可以叫鉤子(Hook),改變了普通程序流程化的運行方式,應用了事件驅動之后,程序將呈現“注冊事件” => “觸發事件”的跳躍式運行,可以在不影響原有程序代碼的,很容易的在任意位置加入新的業務邏輯,讓項目的開發變得極為靈活。
3. 服務管理器(ServiceManager)
服務管理器的概念來自于"服務定位模式(Service locator pattern)"的編程思想。這種思想提倡將程序中的每一個獨立功能提取出來作為一個“服務”,每一個服務都是獨立可喚醒的,只有服務被調用時,服務相關的程序才會啟動。
這也就是ZF2性能提升的秘密所在,ZF2的MVC啟動流程中無處不體現ServiceLocator的思想,功能模塊的調用極為“吝嗇”,想必會給以前對Zend性能有意見的開發者一個大大的驚喜。
4. 依賴注入(Di Dependency Injection)
依賴注入廣泛應用于Java的主流框架中,可以很好的解除大型應用中的耦合。ZF2引入Di也經過了反復的考量和權衡,即使進入beta階段,Di 仍然一度作為ZF2的基本實現方案,整個Mvc的配置基于Di。最終為了避免陷入Di可能造成的元數據式編程泥潭(Metaprogramming), Di只是作為ZF2的底層實現,上層加入了ServiceManager。普通開發者在使用ZF2的過程中不需要接觸到Di的層面。不過這并不妨礙DI作為一個優秀的php組件存在并發揮作用。
5. 社會化編程
ZF2的代碼完全托管在Github,借助Github的優秀設計,任何人都可以輕松的通過fork參與ZF2的項目建設,甚至提交新的模塊功能。筆者AlloVince也幫助Zend小組修復了一些BUG,發現Zend小組響應非常快(從沒有超過24小時),對反饋的意見也會花時間認真解答。所以參與ZF2項目是參與php開源項目一個不錯的選擇。
總結
正如ZF2發布信息中寫到的,沒有哪個框架是完美的,ZF2也不例外。所以作為開發者要做的,不應該是糾結于哪個框架好哪個框架不好這種永遠也得不到結論的問題,而是針對不同的項目選擇合適的框架。
在現階段,開發大中型php應用,特別是商業應用和企業應用,ZF2是一個非常不錯的選擇,因為ZF2有嚴格代碼規范,非常適合團隊開發。而ZF2作為Zend官方的支持產品,整體的可靠性和BUG的響應速度也都是有保證的。
相關資源
最后對于有興趣的朋友,歡迎訪問ZF2官方網站嘗鮮。
