簡述MVC思想與PHP如何實現MVC

2021-05-25 00:45:56 字數 2772 閱讀 5892

我相信已經有很多這樣的文章了,但是我今天還是願意把自己的經驗與大家分享一下。純屬原創,我也沒什麼保留,希望對新手有幫助,有說的不對的地方,也歡迎指出。

什麼是mvc?

簡單的說就是將**原始碼分類、分層。

mvc三個字母的含義:

m:model 模型,負責資料庫操作。

v:view 檢視,負責呼叫model調取資料,再呼叫模板,展示出最終效果。

c:controller 控制器,程式的入口,決定改呼叫哪個view,並告訴view該做什麼。

如此說來,程式的執行順序是c-v-m 或 c-m ,和mvc的名字正好相反。

為什麼要mvc?

1.能使**程式物理結構更合理。

當用php建設乙個**的時候,最笨的方法,你可能把每個頁面建成乙個php檔案。如果你的**只有index.php,menu.php.article.php 三個頁面,那你可以不用mvc,但我們做一般的**的時候,動輒幾十個頁面,把所有頁面放在根目錄顯然不是我們所能接受的,於是你需要乙個合理的思想去將你的**分類,按功能把他們分成不同的目錄,且由程式智慧型的載入呼叫,這就是mvc要幫助你做的。

2.使**更容易維護。

我們再來看單個頁面,最笨的方法,就是php**與html**混合,這顯然不夠好,你在維護**的時候不得不區分**是php,**是html,這對於乙個程式設計師來說,簡直只災難。於是很多人就使用smarty,這樣就可以將「資料處理」與「頁面展示」分開來,這樣做的確不錯,也有很多人正在這麼做,但這還不是mvc,mvc要做的就是將「資料處理」再分為「邏輯處理」與「資料庫操作」,這就是所說的分層。

這樣當你的程式錯誤或想要修改的時候,就變得很輕鬆了,當頁面顯示錯誤的時候,你就去檢查v或模板檔案;當邏輯有問題的時候,你就去檢查c和v;當你資料庫操作錯誤就去檢查m。

其實mvc一般要把php的乙個頁面分割為4個頁面,分別是c,v,m,模板。各司其職,方便管理。

3.有利於**復用。

mvc會把一般會把乙個大的功能放在乙個目錄下,也就是由乙個c去管理。

例如要做乙個含有會員系統的**,我們就可以把會員相關的**都放到user目錄裡,由user_controller統一管理,當我們另乙個**也需要會員系統的時候,我們就可以直接把這個目錄複製過去,修改一下介面就可以了。

php實現mvc的思路

我們需要三個基類:controller、view、model ,然後不同的c、v、m分別繼承他們就有對應的屬性與方法了,如果這裡你不理解,可以去看看物件導向的書。

1. controller類的設計

乙個main()方法,供程式呼叫,主要是通過get和post變數決定該如何處理。

乙個getmodel($model)方法,在需要呼叫資料庫的時候,呼叫對應目錄的m。

乙個display($view)方法,在main()方法中呼叫,載入對應的v,並掉應v的main()方法;

2.view類的設計與controller很相似

乙個main()方法,當c載入v的時候呼叫這個方法,使程式能繼續執行下去。

乙個getmodel($model)方法,在需要呼叫資料庫的時候,呼叫對應目錄的m。

乙個display($template),呼叫對應的模板檔案,並把資料傳遞給模板。

3.model類的設計

可以定義一些屬性,例如要操作那些表,操作那些欄位等。

乙個getdb()方法,獲得乙個資料庫類的例項,(資料庫類一般都是用單件模式設計的)

乙個load()方法,載入乙個資料。

乙個add()方法,可以根據定義好的屬性自動構造sql語句,並執行插入操作。

乙個eidt()方法,同上,但執行修改操作。

乙個del()方法,同上,但執行刪除操作。

為了能使新手更好的理解我這個思路的工作原理,我們現在模擬乙個使用者登入的場景,看看mvc是如何工作的。

現在假設,所有的資料都提交給index.php,

第一步:

我們提交各get變數,告訴index.php該用哪個c,例如可以這樣index.php?controller=user

然後index接收到get變數,什麼也不需要做,直接找到/user/controller.php,把所有資料丟給他,本來get和post就是全域性的,所以index.php也不需要做什麼,直接呼叫c的main函式就可以了,到此index.php的任務完成。

第二步:

c的main函式開始執行,檢查變數,發現使用者要執行的登入操作(很簡單,你post個變數do=login就可以了),於是呼叫getmodel,載入對應的m類(例如/user/models/model.php),並例項化, 呼叫例項的load方法,載入該使用者的資料資料,判斷是否與使用者提交的密碼一致,如果提交的資料不正確header跳轉到出錯頁面,如果正確,呼叫display()方法,載入對應的v(例如/user/views/details.php),並例項化,呼叫其main()函式,進入第三步。到此c的任務已完成,第二不操作均在main函式中進行。

第三步:

你可以選擇呼叫getmodel()載入m,重寫調取資料,也可以在c例項化v的時候,把引數傳過來(例如session),當v已經確定得到資料以後,display(),載入模板,mvc執行完畢。

當然,由於字數與精力限制,這裡寫的只是非常簡要的概括,實際實施的時候要考慮很多細節,但我設計mvc的時候,大概思路就是這樣,也用到了實際中,感覺良好。

這篇文章不算軟文,寫都是實際的東西,希望對新手有幫助,如果你讀不懂,對不起,我文筆有限。

MVC設計模式思想簡述

什麼是設計模式 設計模式是一套被反覆使用 多人知曉的,並經過分類編目的 設計經驗的總結。設計模式不是一種方法或技術,而是一種思想。語言無關 平台無關。例如 孫子兵法,三十六計等。設計模式共23種,常用的4 6種 工廠模式 模式 單例模式 介面卡模式 mvc設計模式 詳見 mvc核心思想 分離。mvc...

php中實現MVC的思想

什麼是mvc?簡單的說就是將網頁原始碼分類 分層。mvc三個字母的含義 m model 模型,負責資料庫操作。v view 檢視,負責呼叫model讀取資料,再呼叫模板,展示出最終效果。c controller 控制器,程式的入口,決定改呼叫哪個view,並告訴view該做什麼。如此說來,程式的執行...

PHP實現MVC思路

我相信已經有很多這樣的文章了,但是我今天還是願意把自己的經驗與大家分享一下。純屬原創,我也沒什麼保留,希望對新手有幫助,有說的不對的地方,也歡迎指出。簡單的說就是將 原始碼分類 分層。mvc三個字母的含義 m model 模型,負責資料庫操作。v view 檢視,負責呼叫model調取資料,再呼叫模...