簡述MVC思想與PHP如何實現MVC
我相信已經有很多這樣的文章了但是我今天還是願意把自己的經驗與大家分享一下純屬原創我也沒什麼保留希望對新手有幫助有說的不對的地方也歡迎指出
什麼是MVC?
簡單的說就是將網站源碼分類分層
MVC三個字母的含義
MModel 模型負責數據庫操作
VView 視圖負責調用Model調取數據再調用模板展示出最終效果
CController 控制器程序的入口決定改調用哪個View並告訴View該做什麼
如此說來程序的執行順序是CVM 或 CM 和MVC的名字正好相反
為什麼要MVC?
能使網站程序物理結構更合理
當用PHP建設一個網站的時候最笨的方法你可能把每個頁面建成一個PHP文件如果你的網站只有indexphpmenuphparticlephp 三個頁面那你可以不用MVC但我們做一般的網站的時候動辄幾十個頁面把所有頁面放在根目錄顯然不是我們所能接受的於是你需要一個合理的思想去將你的代碼分類按功能把他們分成不同的目錄且由程序智能的載入調用這就是MVC要幫助你做的
使代碼更容易維護
我們再來看單個頁面最笨的方法就是PHP代碼與HTML代碼混合這顯然不夠好你在維護網站的時候不得不區分哪裡是PHP哪裡是HTML這對於一個程序員來說簡直只災難於是很多人就使用Smarty這樣就可以將“數據處理”與“頁面展示”分開來這樣做的確不錯也有很多人正在這麼做但這還不是MVCMVC要做的就是將“數據處理”再分為“邏輯處理”與“數據庫操作”這就是所說的分層
這樣當你的程序錯誤或想要修改的時候就變得很輕松了當頁面顯示錯誤的時候你就去檢查V或模板文件當邏輯有問題的時候你就去檢查C和V當你數據庫操作錯誤就去檢查M
其實MVC一般要把PHP的一個頁面分割為個頁面分別是CVM模板各司其職方便管理
有利於代碼復用
MVC會把一般會把一個大的功能放在一個目錄下也就是由一個C去管理
例如要做一個含有會員系統的網站我們就可以把會員相關的代碼都放到user目錄裡由User_Controller統一管理當我們另一個網站也需要會員系統的時候我們就可以直接把這個目錄復制過去修改一下接口就可以了
PHP實現MVC的思路
我們需要三個基類ControllerViewModel 然後不同的CVM分別繼承他們就有對應的屬性與方法了如果這裡你不理解可以去看看面向對象的書
我給大家提供一種MVC基類的設計思路僅供參考
Controller類的設計
一個main()方法供程序調用主要是通過get和post變量決定該如何處理
一個getModel($model)方法在需要調用數據庫的時候調用對應目錄的M
一個display($view)方法在main()方法中調用載入對應的V並掉應V的main()方法
View類的設計與Controller很相似
一個main()方法當C載入V的時候調用這個方法使程序能繼續執行下去
一個getModel($model)方法在需要調用數據庫的時候調用對應目錄的M
一個display($template)調用對應的模板文件並把數據傳遞給模板
Model類的設計
可以定義一些屬性例如要操作那些表操作那些字段等
一個getDB()方法獲得一個數據庫類的實例(數據庫類一般都是用單件模式設計的)
一個load()方法載入一個數據
一個add()方法可以根據定義好的屬性自動構造SQL語句並執行插入操作
一個eidt()方法同上但執行修改操作
一個del()方法同上但執行刪除操作
為了能使新手更好的理解我這個思路的工作原理我們現在模擬一個用戶登錄的場景看看MVC是如何工作的
現在假設所有的數據都提交給indexphp
第一步
我們提交各get變量告訴indexphp該用哪個C例如可以這樣indexphp?controller=user
然後index接收到get變量什麼也不需要做直接找到/user/controllerphp把所有數據丟給他本來GET和POST就是全局的所以indexphp也不需要做什麼直接調用C的main函數就可以了到此indexphp的任務完成
第二步
C的main函數開始執行檢查變量發現用戶要執行的登錄操作(很簡單你post個變量do=login就可以了)於是調用getModel載入對應的M類(例如/user/models/modelphp)並實例化 調用實例的load方法載入該用戶的數據資料判斷是否與用戶提交的密碼一致如果提交的數據不正確header跳轉到出錯頁面如果正確調用display()方法載入對應的V(例如/user/views/detailsphp)並實例化調用其main()函數進入第三步到此C的任務已完成第二不操作均在main函數中進行
第三步
你可以選擇調用getModel()載入M重寫調取數據也可以在C實例化V的時候把參數傳過來(例如SESSION)當V已經確定得到數據以後display()載入模板MVC執行完畢
當然由於字數與精力限制這裡寫的只是非常簡要的概括實際實施的時候要考慮很多細節但我設計MVC的時候大概思路就是這樣也用到了實際中感覺良好
這篇文章不算軟文寫都是實際的東西希望對新手有幫助如果你讀不懂對不起我文筆有限
From:http://tw.wingwit.com/Article/program/PHP/201311/21037.html