「PHP」MVC框架是什麼?爲什麼要用它

什麼是MVC?

MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式

MVC把軟件系統分為三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。

PHP中MVC模式也稱Web MVC,從上世紀70年代進化而來。

MVC的目的是實現一種動態的程序設計,便於後續對程序的修改和擴展簡化,並且使程序某一部分的重複利用成為可能。

除此之外,此模式通過對複雜度的簡化,使程序結構更加直觀。

MVC各部分的職能:

  • 模型Model – 管理大部分的業務邏輯所有的數據庫邏輯
    。模型提供了連接和操作數據庫的抽象層。
  • 控制器Controller - 負責響應用戶請求準備數據,以及決定如何展示數據。
  • 視圖View – 負責渲染數據,通過HTML方式呈現給用戶。
「PHP」MVC框架是什麼?為什麼要用它

一個典型的Web MVC流程:

  1. Controller截獲用戶發出的請求;
  2. Controller調用Model完成狀態的讀寫操作;
  3. Controller把數據傳遞給View;
  4. View渲染最終結果並呈獻給用戶。

為什麼要MVC?

能使網站程序物理結構更合理

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

使代碼更容易維護

我們再來看單個頁面,最笨的方法,就是PHP代碼與HTML代碼混合,這顯然不夠好,你在維護網站的時候不得不區分哪裡是PHP,哪裡是HTML,這對於一個程序員來說,簡直只災難。於是很多人就使用Smarty,這樣就可以將"數據處理"與"頁面展示"分開來,這樣做的確不錯,也有很多人正在這麼做,但這還不是MVC,MVC要做的就是將"數據處理"再分為"邏輯處理"與"數據庫操作",這就是所說的分層。

這樣當你的程序錯誤或想要修改的時候,就變得很輕鬆了,當頁面顯示錯誤的時候,你就去檢查V或模板文件;當邏輯有問題的時候,你就去檢查C和V;當你數據庫操作錯誤就去檢查M。其實MVC一般要把PHP的一個頁面分割為4個頁面,分別是C,V,M,模板。各司其職,方便管理。

有利於代碼複用

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

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

PHP實現MVC的思路

我們需要三個基類:Controller、View、Model ,然後不同的C、V、M分別繼承他們就有對應的屬性與方法了,如果這裡你不理解,可以去看看面向對象的書。

我給大家提供一種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()方法,同上,但執行刪除操作。


分享到:


相關文章: