PHP程序設(shè)計中的MVC是什么-創(chuàng)新互聯(lián)

這篇文章主要介紹“PHP程序設(shè)計中的MVC是什么”,在日常操作中,相信很多人在PHP程序設(shè)計中的MVC是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP程序設(shè)計中的MVC是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為夏河等服務(wù)建站,夏河等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為夏河企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

一、什么是MVC

簡單的說就是將網(wǎng)站源碼分類、分層。
MVC三個字母的含義:
M:Model 模型,負(fù)責(zé)數(shù)據(jù)庫操作。
V:View 視圖,負(fù)責(zé)調(diào)用Model調(diào)取數(shù)據(jù),再調(diào)用模板,展示出最終效果。
C:Controller 控制器,程序的入口,決定改調(diào)用哪個View,并告訴View該做什么。
如此說來,程序的執(zhí)行順序是C-V-M 或 C-M ,和MVC的名字正好相反。

二、為什么要MVC

1.能使網(wǎng)站程序物理結(jié)構(gòu)更合理。

當(dāng)用PHP建設(shè)一個網(wǎng)站的時候,最笨的方法,你可能把每個頁面建成一個PHP文件。如果你的網(wǎng)站只有index.php,menu.php.article.php 三個頁面,那你可以不用MVC,但我們做一般的網(wǎng)站的時候,動輒幾十個頁面,把所有頁面放在根目錄顯然不是我們所能接受的,于是你需要一個合理的思想去將你的代碼分類,按功能把他們分成不同的目錄,且由程序智能的載入調(diào)用,這就是MVC要幫助你做的。

2.使代碼更容易維護(hù)。

我們再來看單個頁面,最笨的方法,就是PHP代碼與HTML代碼混合,這顯然不夠好,你在維護(hù)網(wǎng)站的時候不得不區(qū)分哪里是PHP,哪里是HTML,這對于一個程序員來說,簡直是災(zāi)難。于是很多人就使用Smarty,這樣就可以將“數(shù)據(jù)處理”與“頁面展示”分開來,這樣做的確不錯,也有很多人正在這么做,但這還不是MVC,MVC要做的就是將“數(shù)據(jù)處理”再分為“邏輯處理”與“數(shù)據(jù)庫操作”,這就是所說的分層。
這樣當(dāng)你的程序錯誤或想要修改的時候,就變得很輕松了,當(dāng)頁面顯示錯誤的時候,你就去檢查V或模板文件;當(dāng)邏輯有問題的時候,你就去檢查C和V;當(dāng)你數(shù)據(jù)庫操作錯誤就去檢查M。
其實MVC一般要把PHP的一個頁面分割為4個頁面,分別是C,V,M,模板。各司其職,方便管理。

3.有利于代碼復(fù)用。

MVC會把一般會把一個大的功能放在一個目錄下,也就是由一個C去管理。
例如要做一個含有會員系統(tǒng)的網(wǎng)站,我們就可以把會員相關(guān)的代碼都放到user目錄里,由User_Controller統(tǒng)一管理,當(dāng)我們另一個網(wǎng)站也需要會員系統(tǒng)的時候,我們就可以直接把這個目錄復(fù)制過去,修改一下接口就可以了。

三、PHP實現(xiàn)MVC的思路

我們需要三個基類:Controller、View、Model ,然后不同的C、V、M分別繼承他們就有對應(yīng)的屬性與方法了,如果這里你不理解,可以去看看面向?qū)ο蟮臅?/p>

這里給大家提供一種MVC基類的設(shè)計思路,僅供參考:

1.Controller類的設(shè)計

一個main()方法,供程序調(diào)用,主要是通過get和post變量決定該如何處理。
一個getModel($model)方法,在需要調(diào)用數(shù)據(jù)庫的時候,調(diào)用對應(yīng)目錄的M。
一個display($view)方法,在main()方法中調(diào)用,載入對應(yīng)的V,并掉應(yīng)V的main()方法;

2.View類的設(shè)計與Controller很相似

一個main()方法,當(dāng)C載入V的時候調(diào)用這個方法,使程序能繼續(xù)執(zhí)行下去。
一個getModel($model)方法,在需要調(diào)用數(shù)據(jù)庫的時候,調(diào)用對應(yīng)目錄的M。
一個display($template),調(diào)用對應(yīng)的模板文件,并把數(shù)據(jù)傳遞給模板。

3.Model類的設(shè)計

可以定義一些屬性,例如要操作那些表,操作那些字段等。
一個getDB()方法,獲得一個數(shù)據(jù)庫類的實例,(數(shù)據(jù)庫類一般都是用單件模式設(shè)計的)
一個load()方法,載入一個數(shù)據(jù)。
一個add()方法,可以根據(jù)定義好的屬性自動構(gòu)造SQL語句,并執(zhí)行插入操作。
一個eidt()方法,同上,但執(zhí)行修改操作。
一個del()方法,同上,但執(zhí)行刪除操作。
為了能使新手更好的理解我這個思路的工作原理,我們現(xiàn)在模擬一個用戶登錄的場景,看看MVC是如何工作的。
現(xiàn)在假設(shè),所有的數(shù)據(jù)都提交給index.php,

第一步:
我們提交各get變量,告訴index.php該用哪個C,例如可以這樣index.php?controller=user
然后index接收到get變量,什么也不需要做,直接找到/user/controller.php,把所有數(shù)據(jù)丟給他,本來GET和POST就是全局的,所以index.php也不需要做什么,直接調(diào)用C的main函數(shù)就可以了,到此index.php的任務(wù)完成。

第二步:
C的main函數(shù)開始執(zhí)行,檢查變量,發(fā)現(xiàn)用戶要執(zhí)行的登錄操作(很簡單,你post個變量do=login就可以了),于是調(diào)用getModel,載入對應(yīng)的M類(例如/user/models/model.php),并實例化, 調(diào)用實例的load方法,載入該用戶的數(shù)據(jù)資料,判斷是否與用戶提交的密碼一致,如果提交的數(shù)據(jù)不正確header跳轉(zhuǎn)到出錯頁面,如果正確,調(diào)用display()方法,載入對應(yīng)的V(例如/user/views/details.php),并實例化,調(diào)用其main()函數(shù),進(jìn)入第三步。到此C的任務(wù)已完成,第二不操作均在main函數(shù)中進(jìn)行。

第三步:
你可以選擇調(diào)用getModel()載入M,重寫調(diào)取數(shù)據(jù),也可以在C實例化V的時候,把參數(shù)傳過來(例如SESSION),當(dāng)V已經(jīng)確定得到數(shù)據(jù)以后,display(),載入模板,MVC執(zhí)行完畢。
當(dāng)然,由于字?jǐn)?shù)與精力限制,這里寫的只是非常簡要的概括,實際實施的時候要考慮很多細(xì)節(jié),但我設(shè)計MVC的時候,大概思路就是這樣,也用到了實際中,感覺良好。

到此,關(guān)于“PHP程序設(shè)計中的MVC是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

新聞名稱:PHP程序設(shè)計中的MVC是什么-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://bm7419.com/article12/cdiogc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、商城網(wǎng)站、微信公眾號、品牌網(wǎng)站建設(shè)ChatGPT、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司