最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析用PHP實(shí)現(xiàn)MVC

 更新時(shí)間:2016年03月02日 11:05:42   作者:thl  
在PHP中使用MVC越來(lái)越流行了,特別是在一些開(kāi)源的框架當(dāng)中。接下來(lái)通過(guò)本文給大家介紹PHP實(shí)現(xiàn)MVC的相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧

在PHP中使用MVC越來(lái)越流行了,特別是在一些開(kāi)源的框架當(dāng)中。MVC足以應(yīng)對(duì)大多數(shù)的情況,但還有一些情況是其不太適合的,如比較簡(jiǎn)單的個(gè)人博客,對(duì)于只有幾百篇文章量級(jí)的博客,使用MVC讓人覺(jué)得有些太復(fù)雜了;同樣對(duì)于新浪等門(mén)戶(hù)網(wǎng)站,使用MVC,將有大量的文件被加載,對(duì)于速度的影響是無(wú)法接受的

傳統(tǒng)的面相過(guò)程式的開(kāi)發(fā)方式在處理中型以上的應(yīng)用時(shí),就開(kāi)始顯得力不從心。即便我們能夠快速的完成需求,但是在需求發(fā)生變更后或者進(jìn)行后期維護(hù)的時(shí)候,我們會(huì)深深地陷入我們?cè)缙诖罱ǖ南葳逯?。所以,使用面向?qū)ο蟮姆绞絹?lái)實(shí)現(xiàn)MVC模式,將為我們梳理程序的架構(gòu)提供一個(gè)清晰的思路。

什么是MVC?

關(guān)于MVC的定義和解釋?zhuān)梢哉f(shuō)多種多樣。我們可以在Wiki或者[2]中找到更為詳盡的解釋?zhuān)@里我并不打算,也沒(méi)有能力進(jìn)行深入的講解,從PHP開(kāi)發(fā)的角度來(lái)講,MVC可以概括為:

視圖(The View):

一說(shuō)到視圖,我們很多人都會(huì)想到模板引擎(諸如Smarty等等)。其實(shí)就是各種各樣的輸出,比如說(shuō)html模板和Javascript文件等。

模塊(The Model)

模塊代表了程序的邏輯,在企業(yè)應(yīng)用中通常稱(chēng)為業(yè)務(wù)邏輯層。一般來(lái)講,這一層完成的工作是把原始的數(shù)據(jù)處理成按照我們?cè)O(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的有意義的數(shù)據(jù)序列,并將這些數(shù)據(jù)交給視圖去處理。通常情況下, 模塊中會(huì)利用一個(gè)數(shù)據(jù)抽象類(lèi)來(lái)進(jìn)行與數(shù)據(jù)操作有關(guān)的處理。

Model通常包含了哪些用來(lái)同數(shù)據(jù)庫(kù)打交道的函數(shù)。

控制器(The Controller)

控制器使所有WEB應(yīng)用的第一站,他接受收到的參數(shù),比如$_GET變量,然后做出相應(yīng)的反應(yīng)。

關(guān)于MVC的是否適合PHP的爭(zhēng)論也很多,人們不斷的討論MVC是否適合PHP[3],現(xiàn)在也已經(jīng)有了很多的MVC框架,諸如PHP MVC Frameworks中列出的[4]。那么,為什么人們這么熱衷于MVC,我們?yōu)槭裁匆褂肕VC在我們的設(shè)計(jì)中呢。

為什么用MVC?

MVC最早是用來(lái)解決桌面GUI的編程問(wèn)題,最早的MVC框架應(yīng)該是Sun在1999年提出的Model 2,后來(lái)演變成了Struts。MVC帶給人們深刻的印象,但是我們?cè)谑褂玫倪^(guò)程中,卻并沒(méi)有認(rèn)真的想過(guò)為什么使用MVC。

在傳統(tǒng)的桌面應(yīng)用中,一旦Model中有時(shí)間發(fā)生,我們可以主動(dòng)的讓View界面進(jìn)行刷新,從而展示后臺(tái)發(fā)生的變化。而在Web應(yīng)用中,我們似乎限于傳統(tǒng)的 Http的Request/Response的方式,我們似乎沒(méi)有辦法讓用戶(hù)端進(jìn)行更新。這一段討論,并不是認(rèn)為MVC不能夠用來(lái)進(jìn)行WEB應(yīng)用的開(kāi)發(fā),而是覺(jué)得從某種程度上來(lái)說(shuō),他還不是最合適的。

關(guān)于使用MVC的爭(zhēng)論還有很多[1],但是相信所有習(xí)慣了使用MVC來(lái)組織自己的項(xiàng)目的人,讓他選擇一個(gè)新的項(xiàng)目構(gòu)架時(shí),一定不會(huì)放棄MVC。

如何實(shí)現(xiàn)MVC?

下面是一個(gè)超級(jí)簡(jiǎn)單的MVC結(jié)構(gòu)實(shí)現(xiàn),甚至連數(shù)據(jù)源都用了一個(gè)內(nèi)置的固定數(shù)組,雖然簡(jiǎn)單,但其實(shí)眾多的PHP Framework核心實(shí)現(xiàn)的思想應(yīng)該和這個(gè)是差不多的,只不過(guò)一些framework提供了更多的方便開(kāi)發(fā)者使用的工具,我也想自己來(lái)實(shí)現(xiàn)一個(gè)PHP的框架,目前正在著手策劃中,也希望自己能夠從框架的開(kāi)發(fā)中學(xué)習(xí)到更多的PHP設(shè)計(jì)思想和方法。

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 "";
}
}
$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 = "Link A ";
$links.= "Link B ";
$links.= "Link C ";
return $links;
}
}
====================================================
View.php
class View {
public function display($output){
// ob_start();
echo $output;
}
}

相關(guān)文章

最新評(píng)論

忻州市| 肇庆市| 七台河市| 龙江县| 巴东县| 图木舒克市| 山丹县| 随州市| 启东市| 任丘市| 龙井市| 龙井市| 敦煌市| 淮阳县| 天门市| 偃师市| 馆陶县| 武山县| 江阴市| 迭部县| 泽普县| 调兵山市| 汉沽区| 湟源县| 湘潭市| 满城县| 绵竹市| 达日县| 昆山市| 涟源市| 昌黎县| 礼泉县| 定边县| 葫芦岛市| 九江市| 民县| 泗阳县| 铁力市| 左权县| 大竹县| 德清县|