深入淺析用PHP實現MVC,淺析php實現mvc
在PHP中使用MVC越來越流行了,特別是在一些開源的架構當中。MVC足以應對大多數的情況,但還有一些情況是其不太適合的,如比較簡單的個人部落格,對於只有幾百篇文章量級的部落格,使用MVC讓人覺得有些太複雜了;同樣對於新浪等門戶網站,使用MVC,將有大量的檔案被載入,對於速度的影響是無法接受的
傳統的面相過程式的開發方式在處理中型以上的應用時,就開始顯得力不從心。即便我們能夠快速的完成需求,但是在需求發生變更後或者進行後期維護的時候,我們會深深地陷入我們早期搭建的陷阱中。所以,使用物件導向的方式來實現MVC模式,將為我們梳理程式的架構提供一個清晰的思路。
什麼是MVC?
關於MVC的定義和解釋,可以說多種多樣。我們可以在Wiki或者[2]中找到更為詳盡的解釋,這裡我並不打算,也沒有能力進行深入的講解,從PHP開發的角度來講,MVC可以概括為:
視圖(The View):
一說到視圖,我們很多人都會想到模板引擎(諸如Smarty等等)。其實就是各種各樣的輸出,比如說html模板和Javascript檔案等。
模組(The Model)
模組代表了程式的邏輯,在公司專屬應用程式中通常稱為商務邏輯層。一般來講,這一層完成的工作是把原始的資料處理成按照我們設計的資料結構儲存的有意義的資料序列,並將這些資料交給視圖去處理。通常情況下, 模組中會利用一個資料抽象類別來進行與資料操作有關的處理。
Model通常包含了哪些用來同資料庫打交道的函數。
控制器(The Controller)
控制器使所有WEB應用的第一站,他接受收到的參數,比如$_GET變數,然後做出相應的反應。
關於MVC的是否適合PHP的爭論也很多,人們不斷的討論MVC是否適合PHP[3],現在也已經有了很多的MVC架構,諸如PHP MVC Frameworks中列出的[4]。那麼,為什麼人們這麼熱衷於MVC,我們為什麼要使用MVC在我們的設計中呢。
為什麼用MVC?
MVC最早是用來解決案頭GUI的編程問題,最早的MVC架構應該是Sun在1999年提出的Model 2,後來演變成了Struts。MVC帶給人們深刻的印象,但是我們在使用的過程中,卻並沒有認真的想過為什麼使用MVC。
在傳統的案頭應用中,一旦Model中有時間發生,我們可以主動的讓View介面進行重新整理,從而展示後台發生的變化。而在Web應用中,我們似乎限於傳統的 Http的Request/Response的方式,我們似乎沒有辦法讓使用者端進行更新。這一段討論,並不是認為MVC不能夠用來進行WEB應用的開發,而是覺得從某種程度上來說,他還不是最合適的。
關於使用MVC的爭論還有很多[1],但是相信所有習慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構架時,一定不會放棄MVC。
如何?MVC?
下面是一個超級簡單的MVC結構實現,甚至連資料來源都用了一個內建的固定數組,雖然簡單,但其實眾多的PHP Framework核心實現的思想應該和這個是差不多的,只不過一些framework提供了更多的方便開發人員使用的工具,我也想自己來實現一個PHP的架構,目前正在著手策劃中,也希望自己能夠從架構的開發中學習到更多的PHP設計思想和方法。
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.phpclass Model {private $database = array("a" => "hello world","b" => "ok well done","c" => "good bye",);//@TODO connect the database//run the query and get the resultpublic 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.phpclass View {public function display($output){// ob_start();echo $output;}}
您可能感興趣的文章:
- MVC模式的PHP實現
- PHP實現MVC開發得最簡單的方法——模型
- PHP MVC模式在網站架構中的實現分析
- PHP的MVC模式實現原理分析(一相簡單的MVC架構範例)
- php實現最簡單的MVC架構執行個體教程
- php簡單實現MVC
- php實現簡單的MVC架構執行個體
- PHP簡單的MVC架構實現方法
http://www.bkjia.com/PHPjc/1105376.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1105376.htmlTechArticle深入淺析用PHP實現MVC,淺析php實現mvc 在PHP中使用MVC越來越流行了,特別是在一些開源的架構當中。MVC足以應對大多數的情況,但還有一些情...