成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解PHP實現MVC的幾種方法

開發 后端
這里將介紹PHP實現MVC的幾種方法,使用面向對象的方式來實現MVC模式,將為我們梳理程序的架構提供一個清晰的思路。

我們這里介紹PHP實現MVC的幾種方法,首先將從什么是MVC,然后以代碼的形式介紹PHP實現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。

如何PHP實現MVC?

下面是一個超級簡單的MVC結構實現,甚至連數據源都用了一個內置的固定數組,雖然簡單,但其實眾多的PHP Framework核心實現的思想應該和這個是差不多的,只不過一些framework提供了更多的方便開發者使用的工具,我也想自己來實現一個PHP的框架,目前正在著手策劃中,也希望自己能夠從框架的開發中學習到更多的PHP設計思想和方法。

  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開發專區
  3. 專題:PHP開發基礎入門
  4. PHP 5.3.0發布 新增命名空間等多項特性
  5. PHP命名空間規則解析及高級功能
責任編輯:彭凡 來源: 博客園
相關推薦

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實現頁面跳轉

2009-06-09 11:19:49

2024-06-03 08:26:34

Android開發監聽器

2009-09-10 09:50:47

ASP.NET MVC

2018-02-08 09:04:58

Nginx404頁面方法

2021-06-08 11:42:12

Pandas數據分析Python

2010-05-17 15:17:06

MySQL常用操作

2013-08-21 11:31:21

iPhone圖片方法

2010-01-22 14:46:25

C++語言

2010-10-26 09:23:03

Web Service

2021-03-08 09:32:04

Python文件命令

2020-01-10 16:23:44

Springboot停止服務Java

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2011-06-16 10:48:33

session

2009-08-31 09:19:31

c#隱藏窗口

2021-02-26 13:20:48

Shell空行Linux
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久一区二区三区 | 伊人免费在线观看高清 | 免费视频99| 波多野结衣av中文字幕 | 人妖videosex高潮另类 | 亚洲精品电影在线观看 | 美女网站视频免费黄 | 久草视频在线播放 | 免费久久网站 | 久久久日韩精品一区二区三区 | 免费看一级毛片 | 日韩一区二区三区四区五区六区 | 日韩在线观看精品 | 三级在线免费 | 精品小视频 | 日韩欧美在线不卡 | 成人免费观看视频 | 黑人精品| 日韩欧美亚洲 | 国产一级特黄真人毛片 | 99成人| 亚洲一区二区三区免费在线观看 | 国产有码 | 亚洲精品成人av | 日韩在线免费观看视频 | 国产成人免费在线观看 | 2018天天干天天操 | 激情亚洲 | 麻豆av一区二区三区久久 | 日韩欧美精品在线 | 久久久久久国产精品 | 综合久久久 | 精品国产乱码久久久久久闺蜜 | 在线一区观看 | 欧美5区 | 97狠狠干 | 中文字幕一区在线观看视频 | com.国产| 最近中文字幕免费 | 亚洲综合日韩精品欧美综合区 | 羞羞色在线观看 |