偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解PHP實現MVC的幾種方法

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

我們這里介紹PHP實現MVC的幾種方法,首先將從什么是MVC,然后以代碼的形式介紹PHP實現MVC。相信所有習慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構架時,一定不會放棄MVC。

傳統(tǒng)的面相過程式的開發(fā)方式在處理中型以上的應用時,就開始顯得力不從心。即便我們能夠快速的完成需求,但是在需求發(fā)生變更后或者進行后期維護的時候,我們會深深地陷入我們早期搭建的陷阱中。

什么是MVC?

關于MVC的定義和解釋,可以說多種多樣。我們可以在Wiki或者[2]中找到更為詳盡的解釋,這里我并不打算,也沒有能力進行深入的講解,從PHP開發(fā)的角度來講,MVC可以概括為:

視圖(The View):

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

模塊(The Model)

模塊代表了程序的邏輯,在企業(yè)應用中通常稱為業(yè)務邏輯層。一般來講,這一層完成的工作是把原始的數據處理成按照我們設計的數據結構存儲的有意義的數據序列,并將這些數據交給視圖去處理。通常情況下, 模塊中會利用一個數據抽象類來進行與數據操作有關的處理。
Model通常包含了哪些用來同數據庫打交道的函數。

控制器(The Controller)

控制器使所有WEB應用的第一站,他接受收到的參數,比如$_GET變量,然后做出相應的反應。
關于MVC的是否適合PHP的爭論也很多,人們不斷的討論MVC是否適合PHP[3],現在也已經有了很多的MVC框架,諸如PHP MVC Frameworks中列出的[4]。那么,為什么人們這么熱衷于MVC,我們?yōu)槭裁匆褂肕VC在我們的設計中呢。

為什么用MVC?

MVC最早是用來解決桌面GUI的編程問題,最早的MVC框架應該是Sun在1999年提出的Model 2,后來演變成了Struts。MVC帶給人們深刻的印象,但是我們在使用的過程中,卻并沒有認真的想過為什么使用MVC。

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

關于使用MVC的爭論還有很多[1],但是相信所有習慣了使用MVC來組織自己的項目的人,讓他選擇一個新的項目構架時,一定不會放棄MVC。

如何PHP實現MVC?

下面是一個超級簡單的MVC結構實現,甚至連數據源都用了一個內置的固定數組,雖然簡單,但其實眾多的PHP Framework核心實現的思想應該和這個是差不多的,只不過一些framework提供了更多的方便開發(fā)者使用的工具,我也想自己來實現一個PHP的框架,目前正在著手策劃中,也希望自己能夠從框架的開發(fā)中學習到更多的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開發(fā)專區(qū)
  3. 專題:PHP開發(fā)基礎入門
  4. PHP 5.3.0發(fā)布 新增命名空間等多項特性
  5. PHP命名空間規(guī)則解析及高級功能
責任編輯:彭凡 來源: 博客園
相關推薦

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開發(fā)監(jiān)聽器

2021-06-08 11:42:12

Pandas數據分析Python

2018-02-08 09:04:58

Nginx404頁面方法

2013-08-21 11:31:21

iPhone圖片方法

2010-05-17 15:17:06

MySQL常用操作

2009-09-10 09:50:47

ASP.NET MVC

2011-06-16 10:48:33

session

2020-08-24 08:05:47

JavaScriptJavaScript 頁面

2021-02-26 13:20:48

Shell空行Linux

2020-01-10 16:23:44

Springboot停止服務Java

2009-08-31 09:19:31

c#隱藏窗口

2010-01-22 14:46:25

C++語言

2021-03-08 09:32:04

Python文件命令

2010-10-26 09:23:03

Web Service
點贊
收藏

51CTO技術棧公眾號