自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解PHP實現(xiàn)MVC的幾種方法

開發(fā) 后端
這里將介紹PHP實現(xiàn)MVC的幾種方法,使用面向?qū)ο蟮姆绞絹韺崿F(xiàn)MVC模式,將為我們梳理程序的架構(gòu)提供一個清晰的思路。

我們這里介紹PHP實現(xiàn)MVC的幾種方法,首先將從什么是MVC,然后以代碼的形式介紹PHP實現(xiàn)MVC。相信所有習(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)的處理。
Model通常包含了哪些用來同數(shù)據(jù)庫打交道的函數(shù)。

控制器(The Controller)

控制器使所有WEB應(yīng)用的第一站,他接受收到的參數(shù),比如$_GET變量,然后做出相應(yīng)的反應(yīng)。
關(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è)計思想和方法。

  1. Controller.php  
  2.  
  3. include 'Model.php';  
  4. include 'View.php';  
  5. class Controller {  
  6. private $model     = '';  
  7. private $view     = '';  
  8.  
  9. public function Controller(){  
  10. $this->model    =    new Model();  
  11. $this->view        =    new View();  
  12. }  
  13.  
  14. public function doAction( $method = 'defaultMethod', $params = array() ){  
  15. if( empty($method) ){  
  16. $this->defaultMethod();  
  17. }else if( method_exists($this, $method) ){  
  18. call_user_func(array($this, $method), $params);  
  19. }else{  
  20. $this->nonexisting_method();  
  21. }  
  22. }  
  23.  
  24. public function link_page($name = ''){  
  25. $links = $this->model->getLinks();  
  26. $this->view->display($links);  
  27.  
  28. $result = $this->model->getResult($name);  
  29. $this->view->display($result);  
  30. }  
  31.  
  32. public function defaultMethod(){  
  33. $this->br();  
  34. echo "This is the default method. ";  
  35. }  
  36.  
  37. public function nonexisting_method(){  
  38. $this->br();  
  39. echo "This is the noexisting method. ";  
  40. }  
  41.  
  42. public function br(){  
  43. echo "<br />";  
  44. }  
  45. }  
  46. $controller = new Controller();  
  47. $controller->doAction('link_page', 'b');  
  48. $controller->doAction();  
  49.  
  50. Model.php  
  51.  
  52. Code  
  53. class Model {  
  54. private $database = array(  
  55. "a"    =>    "hello world",  
  56. "b"    =>    "ok well done",  
  57. "c"    =>    "good bye",  
  58. );  
  59.  
  60. //@TODO connect the database  
  61.  
  62. //run the query and get the result  
  63.     public function getResult($name){  
  64. if( empty($name) ){  
  65. return FALSE;  
  66. }  
  67.  
  68. if( in_array($name, array_keys( $this->database ) ) ){  
  69. return $this->database[$name];  
  70. }  
  71. }  
  72. public function getLinks(){  
  73. $links = "<a href='#'>Link A</a>&nbsp;&nbsp;";  
  74. $links."<a href='#'>Link B</a>&nbsp;&nbsp;";  
  75. $links."<a href='#'>Link C</a>&nbsp;&nbsp;";  
  76.  
  77. return $links;  
  78. }  
  79. }  
  80.  
  81. View.php  
  82.  
  83. class View {  
  84.  
  85. public function display($output){  
  86. //        ob_start();  
  87.           
  88. echo $output;  
  89. }  
P>【編輯推薦】

  1. 9月編程語言排行榜:PHP的歷史性突破
  2. 51CTO Web開發(fā)專區(qū)
  3. 專題:PHP開發(fā)基礎(chǔ)入門
  4. PHP 5.3.0發(fā)布 新增命名空間等多項特性
  5. PHP命名空間規(guī)則解析及高級功能
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2010-06-03 08:55:43

LINQ

2009-09-18 12:29:55

2010-04-30 16:22:07

Unix終端

2009-09-01 18:35:53

C#判斷文件存在

2009-12-02 20:02:18

PHP實現(xiàn)頁面跳轉(zhuǎn)

2009-06-09 11:19:49

2024-06-03 08:26:34

Android開發(fā)監(jiān)聽器

2021-06-08 11:42:12

Pandas數(shù)據(jù)分析Python

2018-02-08 09:04:58

Nginx404頁面方法

2013-08-21 11:31:21

iPhone圖片方法

2009-09-10 09:50:47

ASP.NET MVC

2010-05-17 15:17:06

MySQL常用操作

2020-01-10 16:23:44

Springboot停止服務(wù)Java

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2021-02-26 13:20:48

Shell空行Linux

2011-06-16 10:48:33

session

2009-08-31 09:19:31

c#隱藏窗口

2010-01-22 14:46:25

C++語言

2010-10-26 09:23:03

Web Service

2021-03-08 09:32:04

Python文件命令
點贊
收藏

51CTO技術(shù)棧公眾號