1. 程式人生 > >PHP實現MVC思路

PHP實現MVC思路

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

   什麼是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的時候,大概思路就是這樣,也用到了實際中,感覺良好。

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

相關推薦

PHP實現MVC思路

我相信已經有很多這樣的文章了,但是我今天還是願意把自己的經驗與大家分享一下。純屬原創,我也沒什麼保留,希望對新手有幫助,有說的不對的地方,也歡迎指出。    什麼是MVC?     簡單的說就是將網站原始碼分類、分層。     MVC三個字母的含義:     M:Model

PHP實現MVC開發得最簡單的方法——單點入口

  很早前就想寫一些關於PHP實現MVC的新的體會。今天就開始詳細的寫寫我對MVC的一些理解,以及我在開發過程中實現自己的一個框架的一個流程。其中或許說的不正確,還望指正!    網站關於MVC的教材很多了,我這裡不具體說了,不明白的,推薦自己上百度搜索下“MVC",相信

PHP實現執行定時任務的幾種思路詳解

編輯 exists sched ebs conn 多系統 環境 提高效率 pac HP本身是沒有定時功能的,PHP也不能多線程。PHP的定時任務功能必須通過和其他工具結合才能實現,例如WordPress內置了wp-

php源碼建博客4--實現MVC結構微型框架

步驟 wid 搭建博客 指定 ret dispatch 設置 auto 安全 主要: 常量優化路徑 自動加載類 優化入口文件 安全訪問項目目錄 --------------文件結構:-----------------------------------

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

行修改 mode 使用 head 災難 tail sql語句 pla php文件 什麽是MVC?  簡單的說就是將網站源碼分類、分層。  MVC三個字母的含義:  M:Model 模型,負責數據庫操作。  V:View 視圖,負責調用Model調取數據,再調用模板,展示出最

(轉) PHP實現從1累加到100(1+2+….+100=)的幾種思路,挺有意思的!!!

一個經典的小學問題也是一個簡單的PHP小應用,1+2+3……100=多少?使用PHP應該怎麼寫? 這裡總結了以下幾種思路: 1.普通PHPer: $sum = 0 ; for ( $i = 1 ; $i

PHP實現執行定時任務的linux思路詳解

由於公司需要定時對淘寶店家的資訊進行獲取並更新資料庫 所以需要定時執行任務。 PHP本身是沒有定時功能的,PHP也不能多執行緒。PHP的定時任務功能必須通過和其他工具結合才能實現,例如WordPress內建了wp-cron的功能,很厲害。本文,我們就來解析幾種常見的php

PHP簡單實現MVC框架路由功能模式

        說到使用PHP進行網站開發,自然離不開各種PHP的開發框架,開發框架為我們提供了靈活的開發方式,MVC層分離,業務解耦等等,讓我們的開發更為快捷方便。但是很多人只是會使用框架,卻從

打造自己php的開發框架--phpMVC簡單實現

從本篇開始介紹如何用php來實現MVC模式開發,而且後續的文章也是在這個基礎上不斷改造優化。關於MVC這裡就不多說了,並且在以後的文章裡也是以講技術為主。     本篇先介紹一下php的MVC實現原理,我們框架的MVC部分也是基於此原理實現的,但是今天的程式碼並不是框架

冒泡排序-Python與PHP實現

code 引用傳遞 true div bubble logs imp random and Python實現 import random a=[random.randint(1,999) for x in range(0,33)] # 冒泡排序,python中數組是按

選擇排序-Python與PHP實現

blog 性能 null pytho int color += log 時間 選擇排序Python實現 import random # 生成待排序數組 a=[random.randint(1,999) for x in range(0,36)] # 選擇排序 def

php實現中文反轉字符串的方法

str1 單個 head 共和國 list har 字符串 string text 1 <?php 2 3 header("content-type:text/html;charset=utf-8"); 4 /** 5 此函數的作用是反轉中文字符串

AJAX+PHP實現三級聯動

lec hang implode clas success cti 部分 點擊事件 ces 利用ajax實現頁面地區選擇三級聯動 效果圖如下 當選擇相應省份時,對應顯示出所有相關城市和地區的下拉選擇 來看下如何實現的 html頁面部分 <!DOCTYPE htm

使用PHP實現水仙花數及各種特殊有趣數的輸出

php 水仙花數 特殊數據 有趣 算法尊敬的讀者,見文好。本文包含以下內容:1,為什麽要寫這篇文章!2,具體的方案及代碼實現!3,你可能遇到的問題!4,文末本文測試用源碼網盤地址!特殊說明:本文使用的語言是PHP;本文運行的環境是:Apache2.4, PHP5.6 。第一部分:為什麽要寫這篇文章!因為經常會

PHP 實現簡單的樹形列表。

開發 記錄 動態 數據庫設計 在線 最近在為公司開發一個在線瀏覽PDF文檔的小web系統。在構建動態列表的時候犯了愁,很久沒寫代碼了,手有些生了,搞了半天才搞出來,寫篇博文記錄一下。首先是數據庫設計我設計的一個列數為三列的表Treenodes,這三列分別用來存儲當前節點的id、節點名稱、父

PHP 實現簡單的樹形列表 之二

服務器 數據庫 字符串 小項目 function 2017.5.22 北京 大雨來到公司之後, 準備把代碼移植到公司的小項目裏,移植的過程中發現了一處設計有問題的地方,調整一下。第一處錯誤是:構建葉子節點的時候,只保存了節點的名稱,沒有存ID, 如果頁面跟後臺交互的時候,當存在節點名稱一樣

PHP實現簡單的評論與回復功能還有刪除信息

技術分享 mit [0 ech ges get values width 錯誤 我們首先先看一下功能 上面黑色的是評論的下面紅色的字體是回復的 再來看看怎麽實現的 1.發布評論 <form action="pinglunchili.php" method="po

使用jquery+ajax+php實現搜索框的功能

test .ajax 關鍵字 焦點 pwd show span 知識庫 document 搜索框的原理: 客戶端:輸入要搜索的關鍵字於文本框,然後文本框將關鍵字獲取,使用ajax發送請求到服務端,然後根據服務端返回來的信息顯示到一個div中 服務端:接收傳過來的數據,然後在

基於SpringBoot + Mybatis實現 MVC 項目

myba ces find json格式 see framework pro select .info 1.預覽: (1)完整項目結構 (2) 創建數據庫、數據表: 【user.sql】 SET FOREIGN_KEY_CHECKS=0;

PHP實現Collection數據集類及其原理

phpPHP 語言最重要的特性之一便是數組了(特別是關聯數組)。PHP 為此也提供不少的函數和類接口方便於數組操作,但沒有一個集大成的類專門用來操作數組。如果數組操作不多的話,個別函數用起來會比較靈活,開銷也小。但是,如果經常操作數組,尤其是對數組進行各種操作如排序、入棧、出隊列、翻轉、叠代等,系統函數用起來