麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > PHP > 正文

淺析PHP程序設(shè)計(jì)中的MVC編程思想

2020-03-22 20:26:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
PHP的MVC編程思想目前已經(jīng)被廣泛使用于各種大型項(xiàng)目的開(kāi)發(fā),很多成熟的MVC框架也逐漸被大家所熟知并被廣泛應(yīng)用于各類項(xiàng)目中,比較常見(jiàn)的如ThinkPHP、codeigniter、Symfony、yii、cakePHP等等。本文就來(lái)簡(jiǎn)述一下php的MVC程序設(shè)計(jì)思想。一、什么是MVC簡(jiǎn)單的說(shuō)就是將網(wǎng)站源碼分類、分層。
MVC三個(gè)字母的含義:
M:Model 模型,負(fù)責(zé)數(shù)據(jù)庫(kù)操作。
V:View 視圖,負(fù)責(zé)調(diào)用Model調(diào)取數(shù)據(jù),再調(diào)用模板,展示出最終效果。
C:Controller 控制器,程序的入口,決定改調(diào)用哪個(gè)View,并告訴View該做什么。
如此說(shuō)來(lái),程序的執(zhí)行順序是C-V-M 或 C-M ,和MVC的名字正好相反。二、為什么要MVC1.能使網(wǎng)站程序物理結(jié)構(gòu)更合理。當(dāng)用PHP建設(shè)一個(gè)網(wǎng)站的時(shí)候,最笨的方法,你可能把每個(gè)頁(yè)面建成一個(gè)PHP文件。如果你的網(wǎng)站只有index.php,menu.php.article.php 三個(gè)頁(yè)面,那你可以不用MVC,但我們做一般的網(wǎng)站的時(shí)候,動(dòng)輒幾十個(gè)頁(yè)面,把所有頁(yè)面放在根目錄顯然不是我們所能接受的,于是你需要一個(gè)合理的思想去將你的代碼分類,按功能把他們分成不同的目錄,且由程序智能的載入調(diào)用,這就是MVC要幫助你做的。2.使代碼更容易維護(hù)。我們?cè)賮?lái)看單個(gè)頁(yè)面,最笨的方法,就是PHP代碼與HTML代碼混合,這顯然不夠好,你在維護(hù)網(wǎng)站的時(shí)候不得不區(qū)分哪里是PHP,哪里是HTML,這對(duì)于一個(gè)程序員來(lái)說(shuō),簡(jiǎn)直是災(zāi)難。于是很多人就使用Smarty,這樣就可以將“數(shù)據(jù)處理”與“頁(yè)面展示”分開(kāi)來(lái),這樣做的確不錯(cuò),也有很多人正在這么做,但這還不是MVC,MVC要做的就是將“數(shù)據(jù)處理”再分為“邏輯處理”與“數(shù)據(jù)庫(kù)操作”,這就是所說(shuō)的分層。
這樣當(dāng)你的html' target='_blank'>程序錯(cuò)誤或想要修改的時(shí)候,就變得很輕松了,當(dāng)頁(yè)面顯示錯(cuò)誤的時(shí)候,你就去檢查V或模板文件;當(dāng)邏輯有問(wèn)題的時(shí)候,你就去檢查C和V;當(dāng)你數(shù)據(jù)庫(kù)操作錯(cuò)誤就去檢查M。
其實(shí)MVC一般要把PHP的一個(gè)頁(yè)面分割為4個(gè)頁(yè)面,分別是C,V,M,模板。各司其職,方便管理。3.有利于代碼復(fù)用。MVC會(huì)把一般會(huì)把一個(gè)大的功能放在一個(gè)目錄下,也就是由一個(gè)C去管理。
例如要做一個(gè)含有會(huì)員系統(tǒng)的網(wǎng)站,我們就可以把會(huì)員相關(guān)的代碼都放到user目錄里,由User_Controller統(tǒng)一管理,當(dāng)我們另一個(gè)網(wǎng)站也需要會(huì)員系統(tǒng)的時(shí)候,我們就可以直接把這個(gè)目錄復(fù)制過(guò)去,修改一下接口就可以了。三、PHP實(shí)現(xiàn)MVC的思路我們需要三個(gè)基類:Controller、View、Model ,然后不同的C、V、M分別繼承他們就有對(duì)應(yīng)的屬性與方法了,如果這里你不理解,可以去看看面向?qū)ο?/u>的書。這里給大家提供一種MVC基類的設(shè)計(jì)思路,僅供參考:1. Controller類的設(shè)計(jì)一個(gè)main()方法,供程序調(diào)用,主要是通過(guò)get和post變量決定該如何處理。
一個(gè)getModel($model)方法,在需要調(diào)用數(shù)據(jù)庫(kù)的時(shí)候,調(diào)用對(duì)應(yīng)目錄的M。
一個(gè)display($view)方法,在main()方法中調(diào)用,載入對(duì)應(yīng)的V,并掉應(yīng)V的main()方法;2.View類的設(shè)計(jì)與Controller很相似一個(gè)main()方法,當(dāng)C載入V的時(shí)候調(diào)用這個(gè)方法,使程序能繼續(xù)執(zhí)行下去。
一個(gè)getModel($model)方法,在需要調(diào)用數(shù)據(jù)庫(kù)的時(shí)候,調(diào)用對(duì)應(yīng)目錄的M。
一個(gè)display($template),調(diào)用對(duì)應(yīng)的模板文件,并把數(shù)據(jù)傳遞給模板。3.Model類的設(shè)計(jì)可以定義一些屬性,例如要操作那些表,操作那些字段等。
一個(gè)getDB()方法,獲得一個(gè)數(shù)據(jù)庫(kù)類的實(shí)例,(數(shù)據(jù)庫(kù)類一般都是用單件模式設(shè)計(jì)的)
一個(gè)load()方法,載入一個(gè)數(shù)據(jù)。
一個(gè)add()方法,可以根據(jù)定義好的屬性自動(dòng)構(gòu)造SQL語(yǔ)句,并執(zhí)行插入操作。
一個(gè)eidt()方法,同上,但執(zhí)行修改操作。
一個(gè)del()方法,同上,但執(zhí)行刪除操作。
為了能使新手更好的理解我這個(gè)思路的工作原理,我們現(xiàn)在模擬一個(gè)用戶登錄的場(chǎng)景,看看MVC是如何工作的。
現(xiàn)在假設(shè),所有的數(shù)據(jù)都提交給index.php,第一步:
我們提交各get變量,告訴index.php該用哪個(gè)C,例如可以這樣index.php?controller=user
然后index接收到get變量,什么也不需要做,直接找到/user/controller.php,把所有數(shù)據(jù)丟給他,本來(lái)GET和POST就是全局的,所以index.php也不需要做什么,直接調(diào)用C的main函數(shù)就可以了,到此index.php的任務(wù)完成。第二步:
C的main函數(shù)開(kāi)始執(zhí)行,檢查變量,發(fā)現(xiàn)用戶要執(zhí)行的登錄操作(很簡(jiǎn)單,你post個(gè)變量do=login就可以了),于是調(diào)用getModel,載入對(duì)應(yīng)的M類(例如/user/models/model.php),并實(shí)例化, 調(diào)用實(shí)例的load方法,載入該用戶的數(shù)據(jù)資料,判斷是否與用戶提交的密碼一致,如果提交的數(shù)據(jù)不正確header跳轉(zhuǎn)到出錯(cuò)頁(yè)面,如果正確,調(diào)用display()方法,載入對(duì)應(yīng)的V(例如/user/views/details.php),并實(shí)例化,調(diào)用其main()函數(shù),進(jìn)入第三步。到此C的任務(wù)已完成,第二不操作均在main函數(shù)中進(jìn)行。第三步:
你可以選擇調(diào)用getModel()載入M,重寫調(diào)取數(shù)據(jù),也可以在C實(shí)例化V的時(shí)候,把參數(shù)傳過(guò)來(lái)(例如SESSION),當(dāng)V已經(jīng)確定得到數(shù)據(jù)以后,display(),載入模板,MVC執(zhí)行完畢。
當(dāng)然,由于字?jǐn)?shù)與精力限制,這里寫的只是非常簡(jiǎn)要的概括,實(shí)際實(shí)施的時(shí)候要考慮很多細(xì)節(jié),但我設(shè)計(jì)MVC的時(shí)候,大概思路就是這樣,也用到了實(shí)際中,感覺(jué)良好。PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品亚洲网站 | 精品一区二区三区中文字幕 | 狠狠干天天操 | 国产小视频一区 | 亚洲欧美aⅴ | 日本搞逼视频 | 色蜜桃av | 免费a级观看| 国产精品视频久久久 | 精品国产亚洲人成在线 | 久久久久性 | 成人短视频在线观看 | 一区二区三区视频在线 | 国产 一区 精品 | 日本黄色a视频 | 热99在线视频 | 日韩精品网站在线观看 | 精品国产一区二区三区四区阿崩 | 羞羞视频免费视频欧美 | 噜噜在线视频 | 一区二区三级视频 | 亚洲国产高清视频 | 午夜视频久久 | 92看片淫黄大片欧美看国产片 | 亚洲自拍第二页 | 国产999精品久久久久 | 亚洲网站免费看 | 成人啪啪18免费网站 | 88xx成人永久免费观看 | 欧日韩 | 美国av免费看 | 国产精品久久久久久久久久大牛 | 青草久久久久 | 国产高潮失禁喷水爽到抽搐视频 | 全免费午夜一级毛片真人 | 免费在线观看成年人视频 | 国产亚洲精品久久午夜玫瑰园 | 欧美三级日本三级少妇99 | av在线观| 少妇一级淫片免费放正片 | 午夜在线视频观看 |