首頁  >  文章  >  後端開發  >  簡單介紹MVC思想與PHP實作MVC的方法

簡單介紹MVC思想與PHP實作MVC的方法

WBOY
WBOY原創
2016-07-25 09:11:46930瀏覽

所謂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分別繼承他們就有對應的屬性與方法了,如果這裡你不理解,可以去看看物件導向的書。 給大家提供一種MVC基底類別的設計思路,​​僅供參考: 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的時候,大概思路就是這樣,也用到了實際中,感覺良好。



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn