資源描述:
《PHP MVC模式在網(wǎng)站架構(gòu)中的實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、PHPMVC模式在網(wǎng)站架構(gòu)中的實現(xiàn)PHPMVC模式在網(wǎng)站架構(gòu)中的實現(xiàn),閱讀PHPMVC模式在網(wǎng)站架構(gòu)中的實現(xiàn),MVC模式在網(wǎng)站架構(gòu)中十分常見。它允許我們建立一個三層結(jié)構(gòu)的應(yīng)用程式,從代碼中分離出有用的層,幫助設(shè)計師和開發(fā)者協(xié)同工作以及提高我們維護和擴展既有程式的能力。視圖(View)“視圖”MVC模式在網(wǎng)站架構(gòu)中十分常見。它允許我們建立一個三層結(jié)構(gòu)的應(yīng)用程式,從代碼中分離出有用的層,幫助設(shè)計師和開發(fā)者協(xié)同工作以及提高我們維護和擴展既有程式的能力。視圖(View)“視圖”主要指我們送到Web瀏覽器的最終結(jié)果??比如我們的腳本生成的HTML。當說到視圖時,很多人想到的是模版,但是把模板方案叫
2、做視圖的正確性是值得懷疑的。對視圖來說,最重要的事情可能是它應(yīng)該是“自我意識(selfaware)”的,視圖被渲染(render)時,視圖的元素能意識到自己在更大框架中的角色。以XML為例,可以說XML在被解析時,DOMAPI有著這樣的認知??一個DOM樹里的節(jié)點知道它在哪里和它包含了什么。(當一個XML文檔中的節(jié)點用SAX解析時只有當解析到該節(jié)點時它才有意義。)絕大多數(shù)模板方案使用簡單的過程語言和這樣的模板標簽:<p>{some_text}</p><p>{some_more_text}</p>它們在文檔中沒有意義,它們代表的意義只是PHP將用其他的東西來替換它。如果你同意這種對視圖的松
3、散描述,你也就會同意絕大多數(shù)模板方案并沒有有效的分離視圖和模型。模板標簽將被替換成什么存放在模型中。在你實現(xiàn)視圖時問自己幾個問題:“全體視圖的替換容易嗎?”“實現(xiàn)一個新視圖要多久?”“能很容易的替換視圖的描述語言嗎?(比如在同一個視圖中用SOAP文檔替換HTML文檔)”模型(Model)模型代表了程序邏輯。(在企業(yè)級程序中經(jīng)常稱為業(yè)務(wù)層(businesslayer))總的來說,模型的任務(wù)是把原有數(shù)據(jù)轉(zhuǎn)換成包含某些意義的數(shù)據(jù),這些數(shù)據(jù)將被視圖所顯示。通常,模型將封裝數(shù)據(jù)查詢,可能通過一些抽象數(shù)據(jù)類(數(shù)據(jù)訪問層)來實現(xiàn)查詢。舉例說,你希望計算英國年度降雨量(只是為了給你自己找個好點的度假地)
4、,模型將接收十年中每天的降雨量,計算出平均值,再傳遞給視圖??刂破鳎╟ontroller)簡單的說控制器是Web應(yīng)用中進入的HTTP請求最先調(diào)用的一部分。它檢查收到的請求,比如一些GET變量,做出合適的反饋。在寫出你的第一個控制器之前,你很難開始編寫其他的PHP代碼。最常見的用法是index.php中像switch語句的結(jié)構(gòu):<?phpswitch($_GET['viewpage']){case"news":$page=newNewsRenderer;break;case"links":$page=newLinksRenderer;break;default:$page=newHomeP
5、ageRenderer;break;}$page->display();?>這段代碼混用了面向過程和對象的代碼,但是對于小的站點來說,這通常是最好的選擇。雖然上邊的代碼還可以優(yōu)化??刂破鲗嶋H上是用來觸發(fā)模型的數(shù)據(jù)和視圖元素之間的綁定的控件。例子這里是一個使用MVC模式的簡單例子。首先我們需要一個數(shù)據(jù)庫訪問類,它是一個普通類。<?php/***AsimpleclassforqueryingMySQL*/classDataAccess{/***Private*$dbstoresadatabaseresource*/var$db;/***Private*$querystoresaqueryre
6、source*/var$query;//Queryresource//!Aconstructor./***ConstuctsanewDataAccessobject*@param$hoststringhostnamefordbserver*@param$userstringdbserveruser*@param$passstringdbserveruserpassword*@param$dbstringdatabasename*/functionDataAccess($host,$user,$pass,$db){$this->db=mysql_pconnect($host,$user,$
7、pass);mysql_select_db($db,$this->db);}//!Anaccessor/***Fetchesaqueryresourcesandstoresitinalocalmember*@param$sqlstringthedatabasequerytorun*@returnvoid*/functionfetch($sql){$this->query=mysql_unbuffered_query($sql,$th