十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
簡單的說就是將網(wǎng)站源碼分類、分層。
目前成都創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、邱縣網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
MVC三個字母的含義:
M:Model 模型,負(fù)責(zé)數(shù)據(jù)庫操作。
V:View 視圖,負(fù)責(zé)調(diào)用Model調(diào)取數(shù)據(jù),再調(diào)用模板,展示出最終效果。
C:Controller 控制器,程序的入口,決定改調(diào)用哪個View,并告訴View該做什么。
如此說來,程序的執(zhí)行順序是C-V-M 或 C-M ,和MVC的名字正好相反。
其實你的問題一開始就問錯了,即然你問了,我就隨便說說好了。
MVC 是一種設(shè)計風(fēng)格,并不是一種具體手法。每個人寫代碼都有自己習(xí)慣的一種設(shè)計風(fēng)格。MVC 是應(yīng)用程序開發(fā)常用的一種風(fēng)格,實際上并不適合 PHP,因為 PHP 的工作環(huán)境注定了它很難做出像樣的控制器,也就是 Controll 。
MVC 本來的設(shè)計風(fēng)格是:整個系統(tǒng)由一個程序啟動,再根據(jù)用戶操作調(diào)用各個處理模塊,根據(jù)數(shù)據(jù)結(jié)果來決定顯示成什么樣給用戶看。就像我們平時用的各種程序的主界面。這樣程序員創(chuàng)建好主程序以后,只要把注意力集中在開發(fā)各個子功能上就可以了。。
可是 php 大多數(shù)情況下工作于 web 環(huán)境,有“頁”的概念,每次執(zhí)行都是一個新的請求。這就注定了很難實現(xiàn)真正的 MVC,因為用戶看到頁面時,PHP 已經(jīng)執(zhí)行完了,不可能再切換去調(diào)另一個 模型M 和 視圖V 。
目前自稱 MVC 的各種框架。也只不過是用一個程序判斷請求,加載不同的功能塊。只能稱之為“單點入口”,在思路上是“請求相同的部份,而包含不同的部份”。這個入口程序?qū)嶋H上啥也沒做,所以算不上是 MVC。反而 JS 開發(fā)的富客戶端更接近一些。由一個 JS 主程序,跟據(jù)用戶請求決定調(diào)用哪些數(shù)據(jù),再把界面改變成什么樣。
設(shè)計風(fēng)格是前人總結(jié)出來的東西,在當(dāng)前語言,當(dāng)然環(huán)境,當(dāng)前思維方式下。比較容易繼續(xù)思考的一種設(shè)計方式。MVC 只不過是其中一種,而且并不是最適合 PHP 的一種。偏偏被炒作得好像標(biāo)準(zhǔn)似的。。
如果你一定要, 就去看一下 “PHP 單點入口實現(xiàn)”吧,已經(jīng)是比較接近的東西了。如果一次性的控制器也能算控制器的話……
相信所有習(xí)慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構(gòu)架時,一定不會放棄MVC。傳統(tǒng)的面相過程式的開發(fā)方式在處理中型以上的應(yīng)用時,就開始顯得力不從心。即便我們能夠快速的完成需求,但是在需求發(fā)生變更后或者進(jìn)行后期維護(hù)的時候,我們會深深地陷入我們早期搭建的陷阱中。什么是MVC?關(guān)于MVC的定義和解釋,可以說多種多樣。我們可以在Wiki或者[2]中找到更為詳盡的解釋,這里我并不打算,也沒有能力進(jìn)行深入的講解,從PHP開發(fā)的角度來講,MVC可以概括為:視圖(The View):一說到視圖,我們很多人都會想到模板引擎(諸如Smarty等等)。其實就是各種各樣的輸出,比如說html模板和Javascript文件等。模塊(The Model)模塊代表了程序的邏輯,在企業(yè)應(yīng)用中通常稱為業(yè)務(wù)邏輯層。一般來講,這一層完成的工作是把原始的數(shù)據(jù)處理成按照我們設(shè)計的數(shù)據(jù)結(jié)構(gòu)存儲的有意義的數(shù)據(jù)序列,并將這些數(shù)據(jù)交給視圖去處理。通常情況下, 模塊中會利用一個數(shù)據(jù)抽象類來進(jìn)行與數(shù)據(jù)操作有關(guān)的處理。 關(guān)于MVC的是否適合PHP的爭論也很多,人們不斷的討論MVC是否適合PHP[3],現(xiàn)在也已經(jīng)有了很多的MVC框架,諸如PHP MVC Frameworks中列出的[4]。那么,為什么人們這么熱衷于MVC,我們?yōu)槭裁匆褂肕VC在我們的設(shè)計中呢。為什么用MVC?MVC最早是用來解決桌面GUI的編程問題,最早的MVC框架應(yīng)該是Sun在1999年提出的Model 2,后來演變成了Struts。MVC帶給人們深刻的印象,但是我們在使用的過程中,卻并沒有認(rèn)真的想過為什么使用MVC。在傳統(tǒng)的桌面應(yīng)用中,一旦Model中有時間發(fā)生,我們可以主動的讓View界面進(jìn)行刷新,從而展示后臺發(fā)生的變化。而在Web應(yīng)用中,我們似乎限于傳統(tǒng)的Http的Request/Response的方式,我們似乎沒有辦法讓用戶端進(jìn)行更新。這一段討論,并不是認(rèn)為MVC不能夠用來進(jìn)行WEB應(yīng)用的開發(fā),而是覺得從某種程度上來說,他還不是最合適的。關(guān)于使用MVC的爭論還有很多[1],但是相信所有習(xí)慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構(gòu)架時,一定不會放棄MVC。如何PHP實現(xiàn)MVC?下面是一個超級簡單的MVC結(jié)構(gòu)實現(xiàn),甚至連數(shù)據(jù)源都用了一個內(nèi)置的固定數(shù)組,雖然簡單,但其實眾多的PHP Framework核心實現(xiàn)的思想應(yīng)該和這個是差不多的,只不過一些framework提供了更多的方便開發(fā)者使用的工具,我也想自己來實現(xiàn)一個PHP的框架,目前正在著手策劃中,也希望自己能夠從框架的開發(fā)中學(xué)習(xí)到更多的PHP設(shè)計思想和方法。
MVC三個字母的含義:
M:Model 模型,負(fù)責(zé)數(shù)據(jù)庫操作。
V:View 視圖,負(fù)責(zé)調(diào)用Model調(diào)取數(shù)據(jù),再調(diào)用模板,展示出最終效果。
C:Controller 控制器,程序的入口,決定改調(diào)用哪個View,并告訴View該做什么。
下面是一個超級簡單的MVC結(jié)構(gòu)實現(xiàn):
Controller.php
include?'Model.php';
include?'View.php';
class?Controller?{
private?$model?????=?'';
private?$view?????=?'';
public?function?Controller(){
$this-model????=????new?Model();
$this-view????????=????new?View();
}
public?function?doAction(?$method?=?'defaultMethod',?$params?=?array()?){
if(?empty($method)?){
$this-defaultMethod();
}else?if(?method_exists($this,?$method)?){
call_user_func(array($this,?$method),?$params);
}else{
$this-nonexisting_method();
}
}
public?function?link_page($name?=?''){
$links?=?$this-model-getLinks();
$this-view-display($links);
$result?=?$this-model-getResult($name);
$this-view-display($result);
}
public?function?defaultMethod(){
$this-br();
echo?"This?is?the?default?method.?";
}
public?function?nonexisting_method(){
$this-br();
echo?"This?is?the?noexisting?method.?";
}
public?function?br(){
echo?"br?/";
}
}
$controller?=?new?Controller();
$controller-doAction('link_page',?'b');
$controller-doAction();
Model.php
class?Model?{
private?$database?=?array(
"a"????=????"hello?world",
"b"????=????"ok?well?done",
"c"????=????"good?bye",
);
//@TODO?connect?the?database
//run?the?query?and?get?the?result
public?function?getResult($name){
if(?empty($name)?){
return?FALSE;
}
if(?in_array($name,?array_keys(?$this-database?)?)?){
return?$this-database[$name];
}
}
public?function?getLinks(){
$links?=?"a?href='#'Link?A/anbsp;nbsp;";
$links.=?"a?href='#'Link?B/anbsp;nbsp;";
$links.=?"a?href='#'Link?C/anbsp;nbsp;";
return?$links;
}
}
View.php
class?View?{
public?function?display($output){
//????????ob_start();
echo?$output;
}
}
MVC由Model(模型),?view(視圖)和Controller(控制器)組成,PHP MVC可以更高效地管理好3個不同層的PHP代碼。
Model:數(shù)據(jù)信息存取層。
View:view層負(fù)責(zé)將應(yīng)用的數(shù)據(jù)以特定的方式展現(xiàn)在界面上。
Controller:通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。