複製鏈接
請複製以下鏈接發送給好友

PHP框架

鎖定
PHP框架就是一種可以在項目開發過程中,提高開發效率,創建更為穩定的程序,並減少開發者重複編寫代碼的基礎架構。PHP框架是將不同Web系統開發過程中的共性、通用部分功能進行抽象,形成開發Web程序的基本架構。進行Web系統開發時,開發人員如果在PHP框架基礎上進行二次開發,即可大大簡化開發過程,快速實現系統功能。PHP框架能促進Web系統的快速開發、節約時間、減少重複代碼量,並能幫助初學者創建規範、穩定的Web系統。
中文名
PHP框架
外文名
PHP Frame
功    能
解決代碼重用以及快速開發的問題
關鍵技術
MVC模式等
主流PHP框架
Zend Framework、ThinkPHP等
所屬領域
計算機科學技術

PHP框架簡介

框架,即Framework,其實就是某種應用的半成品,或者説是一系列組件,供人們選用它來完成我們自己的應用。換句話説,使用框架開發程序,就好比使用別人已經搭好的舞台來表演,無須費心搭建舞台這樣煩瑣又底層的事情,這樣就可以在如何更好地表演上盡心盡力。例如,微軟的.NET Framework,使用它來開發Windows應用程序效率就會高很多。
PHP開發框架也是如此。PHP開發框架封裝了底層的操作,把Web程序開發擺到了流水線上。換句話説,PHP開發框架有助於促進快速軟件開發(RAD)。使用PHP框架既節約了開發者的時間,也有助於開發者創建更為穩定的程序,並減少開發者重複編寫代碼的勞動。PHP開發框架使得開發者可以花更多的時間去創造真正的Web程序,而不是編寫重複性的代碼。
PHP開發框架多采用“模型一視圖一控制器”(MVC)架構模式。MVC架構最早存在於桌面應用程序中,M是指數據模型,V是指用户界面,C則是指控制器。使用MVC的目的是將M和V的實現代碼分離,即隔離了業務邏輯與用户界面,不管哪一方改變都不會影響另一方。在MVC架構中,模型(Model)負責數據,視圖(View)負責表現,控制器(Controller)負責業務邏輯。從本質上説,MVC拆分了一個程序的開發過程,這樣你就可以修改獨立的每一部分,而其他部分不受影響,這使得編寫PHP代碼更為快捷簡單 [1] 

PHP框架架構分析

在研究PHP開發框架時,首先需要分析框架的Web開發架構的使用問題,而所謂的Web架構,其實就是Web系統服務器腳本和HTTP請求的組織形式。主要有三種Web架構可供PHP開發框架使用。
1、基於文件/參數的Web架構在小型Web系統中得到了廣泛應用,可以根據功能將不同的服務器腳本存儲在不同的目錄中,並使腳本的路徑與URL地址保持一致,而這種開發方式雖然簡單,但是卻不利於搜索引擎收錄,並且難以實現對系統的集中控制。
2、Web系統還有一種基於控制器/動作的開發方式,可以通過調用控制器完成請求的處理,而其架構建立在請求/響應的基礎上。
3、此外,基於組件/事件的Web架構可以將Web系統分成多個組件,並交由事件處理器處理。 [2] 

PHP框架關鍵技術

1、MVC模式
在Web系統中,可以通過MVC模式,將數據處理、控制、數據顯示分別進行處理,形成模型、控制器、視圖等3個模塊,這3種模塊需要採用控制器進行合成,這種MVC模式能夠非常好地解決Web系統經常出現的纏繞問題,從而使得Web系統的架構更加清晰和順暢。但是MVC模式需要通過跨頁面的PHP來對模型和控制器進行連接,而在PHP完成數據分析後就會收回,無法實現PHP的跨頁面操作,因此要進一步對NVC模式進行優化和技術改進。這種情況下,比較好的辦法就是在對PHP回收之前就將PHP信息存在效據庫中,然後在MVC模式需要PHP 時可是隨時從數據庫中調用。但這就需要經常調用數據庫的信息,工作效率非常低。另外一種方式就是採用被動MVC,這種方式的模型與MVC其他結構是沒有關聯的,這就實現了不需要PHP訪問其他頁面,也不需要建立數據庫,大大增加了運行效率。因此,這種被動MVC模式是目前比較有效的MVC模式。
2、視圖層
在Web項目開發過程中,前端設計和程序設計很難達到協調一致。這就需要將頁面設計和程序設計進行分別管理,然後在統一協調,這種方式能夠比較好地解決這個問題。一般情況下,PHP中可以利用塊將顯示和程序進行分別處理,在採用MVC模式時模板一般在視圖層。MVC的模板可以為前端設計提供容易理解的語言,所以前端設計工作就能夠開展HTVL模板的製作工作,然後PHP就可以應用這些模板。因此,通常情況下視圖層一般使用 Smarty模板,這種模板是一種比較簡單的模板,也可以利用PHP模板進行程序顯示,最終的目標就是將前端設計和程序設計成功進行分離。
PHP框架開發中處理好Web系統中的程序和數據庫的分離也是非常重要的。這就需要PHP框架中的數據訪問層技術,這種技術能夠非常好的將程序和數據庫進行分析,也就是通過數據關係映射技術對兩者進行分離,這種技術簡稱ORM技術。數據關係映射技術是把原數據中的程序和數據庫關係映射在數據庫裏面,但是由於技術的複雜性,這種映射效率也是非常低的。為降低PHP數據訪問層的複雜性,在PHP框架開發過程中活動記錄模式不斷被開發並已經得到廣泛應用。活動記錄模式就是將每一條數據記錄都包裝為一個對象,這種模式能夠極大地提高數據庫相關程序的開發速度。但是這種方式在處理關聯表時,即使只提取一條記錄,其他與之相關的所有記錄也都會被包裝為對象,這就會造成效率的急劇下降。對於需要頻繁更新數據的情況,由於所有數據都需要被封裝為對象,更新對象屬性後將對象存入數據庫才能完成數據更新。因此,在PHP框架開發的數據訪問層中使用活動記錄模式的效果仍不理想。
對於輕量級的PHP框架,數據庫的操作更加適合採用簡化的數據庫訪問層方式。表數據入口模式與活動記錄模式相比,只是對數據表進行封裝,而不是封裝每一個記錄行。與PHP強大的關聯數組相結合,表數據入口模式能夠高效、靈活地操作大量的數據。由於表數據入口模式不需要對記錄進行封裝,所以説表數據入口操作的是純數據的,而非封裝了數據的對象。表數據入口模式可直接對數據庫進行操作,這使得表數據入口模式具有非常高的數據操作效率。表數據入口模式在數據表層面上封裝數據操作更加簡單實用,適合用在輕量級的PHP框架中;由於複雜性降低,表數據入口模式也可以大大降低用户的學習成本;表數據入口模型不封裝記錄,因此可以直接操作數據庫,且表數據入口模式中的數據以數組的形式保存,利用PHP關聯數組的優勢,執行效率比活動記錄模式高得多。 [3] 

PHP框架常見框架

下面介紹幾個主流的PHP框架。
(1)Zend Framework
Zend Framework是由Zend公司開發的PHP框架,可用於開發Web程序和服務。Zend Framework採用MVC架構模式來分離應用程序中不同的部分,從而方便程序的開發和維護。
(2)CakePHP
CakePHP是一個運用了諸如ActiveRecord、Association Data Mapping、Front Controller和MVC等著名設計模式的快速開發框架。該框架的主要目標是讓各種層次的PHP開發人員都能快速靈活地開發健壯的Web應用。
(3)Yii
Yii是一個基於組件的高性能PHP框架,用於開發大型Web應用。Yii採用嚴格的OOP編寫,並有着完善的庫引用以及全面的教程。Yii幾乎提供瞭如今Web2.0應用開發所需要的一切功能,事實上,Yii也是最有效率的PHP框架之一。
(4)ThinkPHP
ThinkPHP是一個由國人開發的快速、兼容而且簡單的輕量級PHP開發框架。誕生於2006年初,原名FCS,2007年元旦正式更名為ThinkPHP。ThinkPHP遵循Apache2開源協議發佈,從Struts結構移植過來並做了改進和完善,同時也借鑑了國外很多優秀的框架和模式。使用面向對象的開發結構和MVC模式,融合了Struts的思想和TagLib(標籤庫)、RoR的ORM映射和ActiveRecord模式,封裝了對數據庫的常用操作,單一入口模式等。在模板引擎、緩存機制、認證機制和擴展性方面均有獨特的表現。
(4)Codelgniter
Codelgniter(CI)也是一個比較老牌的PHP框架。和ZF相反,它非常小巧,核心類庫僅有1MB左右。使用起來比較簡單,代碼框架遵循常見的MVC結構。但是CI的類庫封裝得還不夠精細,某些框架層次感覺設計得過於煩瑣;另外CI的文檔做得不是很好,特別是缺乏良好的中文文檔,這大大阻礙了CI框架在國內的普及。 [4] 

PHP框架侷限性

雖然國內外PHP開發框架已經有很多,但是仍然存在一些問題。總結如下:
(1)忽視PHP語言本身的特點,現有的PHP開發框架的邏輯分層耦合度高。其中模型層對數據庫設計的依賴性明顯,代碼重用性低。當數據庫表發生改變時,需要開發人員對系統做大量的修改,不利於系統後期的擴展。
(2)現有框架的SQL注入防禦效果不佳。大部分框架主要對已知的SQL注入攻擊技術進行了基礎防禦,很容易被入侵者通過其他手段繞過安全檢測。 [5] 
參考資料