PHP框架概論

2021-07-23 06:31:40 字數 3521 閱讀 6169

php語言本身是一門指令碼語言,雖然其類似於shell、python等這些指令碼語言。但其最常見的領域還是web端,目前世界上大部分的**都是用php語言開發的。php語言同時也是一門非常易學的語言,初學者可以很快就入門、上手。你會發現,使用php開發乙個簡單的部落格系統,是極快的。但是,隨著web端需求越來越複雜,你會發現,單純的靠依賴php原生語法堆砌功能,專案會變得越來越臃腫,很多時候牽一髮而動全身,這個時候,你就會發現,是時候去尋找一款適合這個專案的框架了。

世界上流行的php開源框架特別多,雖然框架的架構不同、使用的設計模式千差萬別,但幾乎所有的框架目的都是一樣的,他們都是為了解決絕大多數專案中遇到的這些問題:

1. 如何統一控制使用者訪問許可權

幾乎目前所有流行的框架都採用單一入口檔案的方式來控制使用者對整個系統的訪問,也就是一般專案webroot下面的index.php檔案。採用單一入口檔案可以方便系統許可權的統一管理,同時減少邏輯控制**的重複呼叫,不過,採用單一入口的方式,相應地就帶來了路由規則需求,即通過路由規則來對映請求引數對應的系統模組的呼叫。

2. 如何控制、分離表現層和資料層

幾乎絕大多數的框架都採用了mvc的分層模式對框架進行分層處理,把html靜態標籤、php邏輯**以及資料物件進行分離,是**開發系統架構的標配。由資料層(model)提供資料給控制器層(controller),然後控制器把資料傳遞給表現層(view)進行渲染,最終輸出結果。

3. 如何簡單、高效的開發表現層

php原生指令碼**檔案中,php**和html標籤是混合在一起的,這種僅僅為了輸出乙個變數就要寫上一段<?php echo $hello;?>對於開發者來說不僅低效,而且對於維護者來說也比較難以閱讀**的整體結構。於是就有了像smarty這種模板引擎,smarty是專為分離html和php**而存在,像上面輸出乙個變數,在smarty中,只要用即可。幾乎大多數框架都有自己的一套模板引擎,同時也支援安裝和使用第三方的模板引擎。有人會想到,增加模板引擎,就會額外的增加模板的解析、編譯的時間,針對這個需求,模板檔案快取也就應運而生,快取只會在模板檔案有更改的情況下才重新編譯,這樣就節省了解析和編譯的時間。

4. 如何復用增刪改查資料庫操作、規避sql注入

在**開發中,比較常用的資料庫是mysql,但是也不排查有可能會用到nosql、sqlite以及oracle等。所以,在php框架中,我們需要提供針對不同的資料庫相應地連線驅動程式。資料庫操作,絕大多數就是增刪改查,所以,我們完全可以抽象出來這些操作介面提供給業務邏輯層,業務邏輯不用去關心原生的sql語句如何拼接,同時也不用關心如何規避sql注入風險。在框架中,用model層來完成這些工作。當**流量比較大的時候,一台資料庫機器可能已經無法滿足需求了,這個時候就需要多台資料庫伺服器提供分布式資料服務,同時還需要讀寫資料庫分離等。

5. 如何提高整體系統執行效能(加入快取)

對於**效能優化,這是乙個非常值得大家去學習和**的話題。對於開發者來說,最需要關心的是專案**執行的速度和效率,cache 是最有效的提高系統執行效能的方法。前面我們提到的通過模板引擎生成模板快取檔案,可以大大的減少每次模板解析和編譯的時間。同時,對於整個系統,框架也提供了runtime 全域性快取檔案,檔案的讀取操作是耗時的,特別是當乙個專案比較龐大的時候,多次require和include勢必會增加專案的執行時間,如果把這些檔案內容全部寫入乙個整體的快取檔案中,那麼再次執行的時候將會極大的降低了執行時間。同時,還有資料庫快取,讀取資料庫時間大於檔案讀取時間大於記憶體讀取時間,框架提供可以把資料庫中的資料庫寫入到磁碟檔案中,或者使用squid、memcache記憶體快取軟體進行高效的訪問。

6. 如何統一各個開發者公用部分模組行為:系統配置、請求資訊、除錯、日誌以及表單驗證

現在的軟體專案基本上都是多人協作的方式進行開發,php專案也不例外。除了框架開發之前進行的變數定義、類宣告、命名空間的約定,還需要對大家都可能會用到的基礎性功能模組定義和約束。約定好框架中系統配置變數所在的檔案的位置,這樣就可以統一載入所有的全域性定義變數,在整個系統多個模組之間都可以共享。統一處理請求資訊,比如對get請求中包含的特殊字元進行轉義、對post資料進行統一檢查,預防xss漏洞注入以及提供一些常見的通用的方法來獲取使用者ip位址、使用者瀏覽器版本等資訊。很多時候,對於開發者來說,最容易忽略的就是加入除錯和日誌功能到系統中,加入統一的除錯,一方面可以節省各自重新實現一遍耗費的時間,另一方面系統上線後,可以很方便遮蔽除錯資訊的輸出。日誌功能對於乙個上線的專案是非常有用的,有些隱藏的bug是很難重現的,這個時候就需要在可能出現bug的地方,加入日誌資訊,觀察bug出現前後系統變數的值和狀態。form表單輸入有效性驗證,也是所有的資料提交需要用到的基礎性功能,這些都是框架可以提供的公用的模組。

7. 如何實現系統的多語言切換

任何乙個相對成熟的專案,都會考慮到多語言國際化。通過加入lang層,把所有的本地化的語言字串全部分離放到lang層,然後通過呼叫變數的方式即可完成相應語言項的選擇。

目前世界上流行的php開源框架特別的多,每種框架都有一批使用者,很難說哪種框架優於其他的框架,基本上每種框架都有比較適合的人群和領域,建議大家根據需求來選擇。

1. zend

zend framework在開發者社群中很有人氣,其重點是web 2.0風格的應用程式。由於其廣泛的支援和積極的使用者群,zend被稱為php company。zend即使不是當今最流行的php框架,也絕對是之一。它強大的功能能夠滿足企業級的需求,當然它的使用也需要具備廣泛的php知識。

2. yii framework

yii是乙個免費,開源的web 2.0 應用開發框架,使用php5開發,幫助開發乾淨,簡潔的設計並且鼓勵開發者開發。它幫助流水化的開發應用,並且保證高效,可擴充套件和易維護。效能極大的優化,非常適合開發任何型別的產品和專案。然而,它內建複雜,企業級別的應用。你擁有完整的控制,包括表現層和持久層,符合了企業級別開發的指導方針。

3. symfony

symfony針對的更多的是高階開發者,也即建立企業級應用的開發者,尤其是askeet和yahoo! bookmarks。這個開源的php框架功能全面,但它的主要缺點是速度慢於其他框架。

4. cakephp

從初學者到高階php開發者,cakephp都是乙個很棒的選擇。它與 ruby on rails設計的原則基本相同,主要集中在快速開發方面使其成為乙個快速應用開發的優良框架。其迅速增長的支援系統、簡單和可擴充套件性使cakephp成為當今最熱門的php框架。

5. codeigniter

thinkphp是一款國人自主研發的php框架,文件比較齊全,適合初學者學習使用。

面對形形色色的php框架,在選擇框架使用的時候,很多人糾結症就會犯了,到底該選用哪種框架?根據我本人經驗來看,首先,應該是對專案需求進行深入的分析,看看該專案需要解決哪些問題,專案的複雜度怎樣,然後盡可能的考慮到專案未來的走向,比如:如果是電商平台的,未來隨著專案上線,會員會越來越多,訂單量有可能會急劇增加等,針對這種未來可能會有**式增長可能的需求,就要選用企業級的框架,效能要穩定,安全性要非常高。再比如,如果純粹是開發乙個公司內部人員使用的oa系統,未來公司人員增長和系統訪問量都在可預估的量之下,基本上選用ci框架就足夠了。

不過,框架也不是萬能的,如果在沒有熟悉php基礎語法,對框架一知半解的情況下,貿然使用框架,對於專案來說是可能災難性的。選對框架非常重要,選擇之後,繼續學習更重要。

Selenium框架1 概論

框架的主要作用就是幫助編寫更加簡單而且好維護的用例,讓我們把主要精力放在測試用例的設計上,那麼我們就需要把所有額外的東西抽象出來作為框架的部分。包含 日誌以及報告 日誌級別 url 瀏覽器型別等基本配置 引數化公共方法 test framework config 配置檔案 data 資料檔案 dri...

php常見框架

yii 是乙個基於元件 用於開發大型 web 應用的高效能 php 框架.採用嚴格的oop編寫,並有著完善的庫引用以及全面的教程,提供了今日web 2.0應用開發所需要的幾乎一切功能.phalcon 是一套實現mvc架構的高效能php 應用程式框架 yaf 是乙個c語言編寫的php框架,1 是乙個以...

PHP開源框架整理

1.discuz 中國地區最多使用者使用的論壇程式,論壇搭建非常簡單易用,使用風格符合中國人的口味。網路上有很多的模板和功能外掛程式供大家選擇。2.phpwind 速度快,處理效率高,用的人也比較多,和discuz 不相上下,這兩款php論壇程式占居了整個國內論壇大多數份額。3.ucenter 通過...