王欣
摘 要:PHP框架開(kāi)發(fā)已經(jīng)成為Web系統(tǒng)發(fā)展的重要環(huán)節(jié),加強(qiáng)對(duì)PHP技術(shù)的研究和開(kāi)發(fā)具有非常重要的意義,對(duì)于PHP技術(shù)的發(fā)展和推廣具有一定積極作用。本文對(duì)PHP框架開(kāi)發(fā)的架構(gòu)進(jìn)行了分析,分別從文件和參數(shù)、控制器和動(dòng)作、組件和事件等方面進(jìn)行了分析,介紹了PHP框架開(kāi)發(fā)的關(guān)鍵技術(shù),包括MVC模式、視圖層、數(shù)據(jù)訪問(wèn)層等內(nèi)容。
關(guān)鍵詞:PHP;框架開(kāi)發(fā);關(guān)鍵技術(shù)
中圖分類(lèi)號(hào):TP311.5 文獻(xiàn)標(biāo)志碼:A
隨著計(jì)算機(jī)技術(shù)的全面發(fā)展,服務(wù)器腳本語(yǔ)言也在不斷進(jìn)步,其中PHP技術(shù)發(fā)展的越來(lái)越快,由于PHP的簡(jiǎn)單、適用性更加廣泛,PHP技術(shù)已經(jīng)是Web語(yǔ)言開(kāi)發(fā)中非常重要的工具之一。但是在PHP5之前的技術(shù)都不具有非常好的適用性,因此PHP技術(shù)的發(fā)展還是落后于Java等計(jì)算機(jī)語(yǔ)言,加強(qiáng)對(duì)PHP技術(shù)的研究和推廣對(duì)PHP技術(shù)的開(kāi)發(fā)和發(fā)展具有重要意義。本文首先對(duì)PHP框架開(kāi)發(fā)的架構(gòu)進(jìn)行了分析,分別從文件和參數(shù)、控制器和動(dòng)作、組件和事件等方面進(jìn)行了分析,重點(diǎn)介紹了PHP框架開(kāi)發(fā)的關(guān)鍵技術(shù),包括MVC模式、視圖層、數(shù)據(jù)訪問(wèn)層等內(nèi)容。通過(guò)對(duì)PHP框架開(kāi)發(fā)關(guān)鍵技術(shù)的介紹,有利于推動(dòng)PHP技術(shù)的推廣和發(fā)展。
1 PHP框架開(kāi)發(fā)的架構(gòu)分析
PHP就是在HTTP發(fā)出請(qǐng)求時(shí)需要通過(guò)服務(wù)器端腳本PHP對(duì)這些數(shù)據(jù)資料進(jìn)行管理。了解PHP框架開(kāi)發(fā)就必須要了解Web架構(gòu)情況,通常將Web架構(gòu)分為3種情況,包括基于文件和參數(shù)、基于控制器和動(dòng)作、基于組件和事件等這3種情況,以下對(duì)這3種架構(gòu)分別進(jìn)行分析。
1.1 基于文件和參數(shù)
一般情況下,在Web系統(tǒng)中是按照腳本的功能差異,將服務(wù)器腳本放在很多功能不同的目錄中,每個(gè)腳本都有自己的URL地址。當(dāng)HTTP發(fā)出請(qǐng)求時(shí),就可以按照腳本的URL地址進(jìn)行訪問(wèn),同時(shí)需要在URL增加一些參數(shù),讓相應(yīng)的腳本處理這些指定的數(shù)據(jù)信息,在腳本完成數(shù)據(jù)處理后再將處理結(jié)果反饋給HTTP。這種方式比較簡(jiǎn)單,就是通過(guò)過(guò)程開(kāi)發(fā)的方式,通常會(huì)應(yīng)用在小的Web程序中。但是,由于基于文件和參數(shù)的這種腳本方式對(duì)于搜索功能來(lái)說(shuō)不方便,而且每個(gè)文件處理相應(yīng)的HTTP請(qǐng)求,所以無(wú)法實(shí)現(xiàn)腳本的集中管理。
1.2 基于控制器和動(dòng)作
Web系統(tǒng)通過(guò)采用基于控制器和動(dòng)作的方式能夠服務(wù)比較成熟的用戶(hù)?;诳刂破骱蛣?dòng)作的開(kāi)發(fā)方式就是先對(duì)HTTP進(jìn)行解析,在通過(guò)指定的控制器對(duì)HTTP的請(qǐng)求進(jìn)行分析處理。一般都是采用MVC模式來(lái)實(shí)現(xiàn)控制器和動(dòng)作的數(shù)據(jù)處理。另外,基于控制器和動(dòng)作的方式與基于文件的方式類(lèi)似,都是需要采用請(qǐng)求和響應(yīng)的驅(qū)動(dòng)方式。
1.3 基于組件和事件
基于組件和事件的Web架構(gòu)也是非常常用的方式,這種方式就是通過(guò)組件對(duì)一些事件進(jìn)行處理,也就是把HTTP的訪問(wèn)按照一定的程序轉(zhuǎn)換為一個(gè)事件,然后再處理這個(gè)事件,NET就是這種形式的Web架構(gòu)。但這種基于組件和事件的方式需要足夠強(qiáng)大的控件和IDE環(huán)境,否則就無(wú)法實(shí)現(xiàn)非常高的開(kāi)發(fā)速度和重復(fù)利用的能力。
2 PHP框架開(kāi)發(fā)的關(guān)鍵技術(shù)
2.1 MVC模式
在Web系統(tǒng)中,可以通過(guò)MVC模式,將數(shù)據(jù)處理、控制、數(shù)據(jù)顯示分別進(jìn)行處理,形成模型、控制器、視圖等3個(gè)模塊,這3種模塊需要采用控制器進(jìn)行合成,這種MVC模式能夠非常好地解決Web系統(tǒng)經(jīng)常出現(xiàn)的纏繞問(wèn)題,從而使得Web系統(tǒng)的架構(gòu)更加清晰和順暢。但是MVC模式需要通過(guò)跨頁(yè)面的PHP來(lái)對(duì)模型和控制器進(jìn)行連接,而在PHP完成數(shù)據(jù)分析后就會(huì)收回,無(wú)法實(shí)現(xiàn)PHP的跨頁(yè)面操作,因此要進(jìn)一步對(duì)MVC模式進(jìn)行優(yōu)化和技術(shù)改進(jìn)。這種情況下,比較好的辦法就是在對(duì)PHP回收之前就將PHP信息存在數(shù)據(jù)庫(kù)中,然后在MVC模式需要PHP時(shí)可是隨時(shí)從數(shù)據(jù)庫(kù)中調(diào)用。但這就需要經(jīng)常調(diào)用數(shù)據(jù)庫(kù)的信息,工作效率非常低。另外一種方式就是采用被動(dòng)MVC,這種方式的模型與MVC其他結(jié)構(gòu)是沒(méi)有關(guān)聯(lián)的,這就實(shí)現(xiàn)了不需要PHP訪問(wèn)其他頁(yè)面,也不需要建立數(shù)據(jù)庫(kù),大大增加了運(yùn)行效率。因此,這種被動(dòng)MVC模式是目前比較有效的MVC模式。
2.2 視圖層
在Web項(xiàng)目開(kāi)發(fā)過(guò)程中,前端設(shè)計(jì)和程序設(shè)計(jì)很難達(dá)到協(xié)調(diào)一致。這就需要將頁(yè)面設(shè)計(jì)和程序設(shè)計(jì)進(jìn)行分別管理,然后在統(tǒng)一協(xié)調(diào),這種方式能夠比較好地解決這個(gè)問(wèn)題。一般情況下,PHP中可以利用模塊將顯示和程序進(jìn)行分別處理,在采用MVC模式時(shí)模板一般在視圖層。MVC的模板可以為前端設(shè)計(jì)提供容易理解的語(yǔ)言,所以前端設(shè)計(jì)工作就能夠開(kāi)展HTML模板的制作工作,然后PHP就可以應(yīng)用這些模板。因此,通常情況下視圖層一般使用Smarty模板,這種模板是一種比較簡(jiǎn)單的模板,也可以利用PHP模板進(jìn)行程序顯示,最終的目標(biāo)就是將前端設(shè)計(jì)和程序設(shè)計(jì)成功進(jìn)行分離。
2.3 數(shù)據(jù)訪問(wèn)層
PHP框架開(kāi)發(fā)中處理好Web系統(tǒng)中的程序和數(shù)據(jù)庫(kù)的分離也是非常重要的。這就需要PHP框架中的數(shù)據(jù)訪問(wèn)層技術(shù),這種技術(shù)能夠非常好的將程序和數(shù)據(jù)庫(kù)進(jìn)行分析,也就是通過(guò)數(shù)據(jù)關(guān)系映射技術(shù)對(duì)兩者進(jìn)行分離,這種技術(shù)簡(jiǎn)稱(chēng)ORM技術(shù)。數(shù)據(jù)關(guān)系映射技術(shù)是把原數(shù)據(jù)中的程序和數(shù)據(jù)庫(kù)關(guān)系映射在數(shù)據(jù)庫(kù)里面,但是由于技術(shù)的復(fù)雜性,這種映射效率也是非常低的。為降低PHP數(shù)據(jù)訪問(wèn)層的復(fù)雜性,在PHP框架開(kāi)發(fā)過(guò)程中活動(dòng)記錄模式不斷被開(kāi)發(fā)并已經(jīng)得到廣泛應(yīng)用?;顒?dòng)記錄模式就是將每一條數(shù)據(jù)記錄都包裝為一個(gè)對(duì)象,這種模式能夠極大地提高數(shù)據(jù)庫(kù)相關(guān)程序的開(kāi)發(fā)速度。但是這種方式在處理關(guān)聯(lián)表時(shí),即使只提取一條記錄,其他與之相關(guān)的所有記錄也都會(huì)被包裝為對(duì)象,這就會(huì)造成效率的急劇下降。對(duì)于需要頻繁更新數(shù)據(jù)的情況,由于所有數(shù)據(jù)都需要被封裝為對(duì)象,更新對(duì)象屬性后將對(duì)象存入數(shù)據(jù)庫(kù)才能完成數(shù)據(jù)更新。因此,在PHP框架開(kāi)發(fā)的數(shù)據(jù)訪問(wèn)層中使用活動(dòng)記錄模式的效果仍不理想。
對(duì)于輕量級(jí)的PHP框架,數(shù)據(jù)庫(kù)的操作更加適合采用簡(jiǎn)化的數(shù)據(jù)庫(kù)訪問(wèn)層方式。表數(shù)據(jù)入口模式與活動(dòng)記錄模式相比,只是對(duì)數(shù)據(jù)表進(jìn)行封裝,而不是封裝每一個(gè)記錄行。與PHP強(qiáng)大的關(guān)聯(lián)數(shù)組相結(jié)合,表數(shù)據(jù)入口模式能夠高效、靈活地操作大量的數(shù)據(jù)。由于表數(shù)據(jù)入口模式不需要對(duì)記錄進(jìn)行封裝,所以說(shuō)表數(shù)據(jù)入口操作的是純數(shù)據(jù)的,而非封裝了數(shù)據(jù)的對(duì)象。表數(shù)據(jù)入口模式可直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,這使得表數(shù)據(jù)入口模式具有非常高的數(shù)據(jù)操作效率。表數(shù)據(jù)入口模式在數(shù)據(jù)表層面上封裝數(shù)據(jù)操作更加簡(jiǎn)單實(shí)用,適合用在輕量級(jí)的PHP框架中;由于復(fù)雜性降低,表數(shù)據(jù)入口模式也可以大大降低用戶(hù)的學(xué)習(xí)成本;表數(shù)據(jù)入口模型不封裝記錄,因此可以直接操作數(shù)據(jù)庫(kù),且表數(shù)據(jù)入口模式中的數(shù)據(jù)以數(shù)組的形式保存,利用PHP關(guān)聯(lián)數(shù)組的優(yōu)勢(shì),執(zhí)行效率比活動(dòng)記錄模式高得多。
結(jié)語(yǔ)
隨著計(jì)算機(jī)技術(shù)和PHP技術(shù)水平的發(fā)展,PHP技術(shù)已經(jīng)能夠非常好的適應(yīng)Web系統(tǒng),但是PHP技術(shù)在使用過(guò)程中仍然需要進(jìn)一步優(yōu)化,不斷創(chuàng)新,為Web系統(tǒng)的優(yōu)化提出更優(yōu)的方案。如果PHP技術(shù)止步不前或者不能夠迅速發(fā)展,很有可能被其他更好的技術(shù)所替代,也不能很好的服務(wù)于Web系統(tǒng)。目前,采用被動(dòng)MVC技術(shù)基本能夠較好地解決Web系統(tǒng)效率低的問(wèn)題,采用表數(shù)據(jù)入口模式能夠很好地解決訪問(wèn)層的問(wèn)題。通過(guò)對(duì)PHP技術(shù)的不斷研發(fā),可以為Web系統(tǒng)提供更加順暢的腳本服務(wù)。
參考文獻(xiàn)
[1]任中方.MVC模式研究的綜述[J].計(jì)算機(jī)應(yīng)用研究,2004(10):1-4.
[2]曾楠.基于MVC模式的嵌入式Web設(shè)計(jì)方法[J].廈門(mén)大學(xué)學(xué)報(bào),2006(2):196-198.
[3]仝戈,張武裝.Smarty在基于MVC框架的Web應(yīng)用程序開(kāi)發(fā)中的應(yīng)用[J].科技信息,2009(31):839-840.