首頁  >  文章  >  後端開發  >  php中的MVC模式運用技巧範例程式碼

php中的MVC模式運用技巧範例程式碼

怪我咯
怪我咯原創
2017-07-12 14:28:441384瀏覽

  MVC模式是"Model-View-Controller"的縮寫,中文翻譯為"模式-視圖-控制器"。 MVC應用程式總是由這三個部分組成。 Event(事件)導致Controller改變Model或View,或同時改變兩者。只要Controller改變了Models的資料或屬性,所有所依賴的View都會自動更新。類似的,只要Controller改變了View,View就會從潛在的Model中取得資料來刷新自己。 MVC模式最早是smalltalk語言研究團提出的,應用於使用者互動應用程式。 smalltalk語言和java語言有很多相似性,都是物件導向語言,很自然的SUN在petstore(寵物店)事例應用程式中就推薦MVC模式作為開發Web應用的架構模式。 MVC模式是一種架構模式,其實需要其他模式協作完成。在J2EE模式目錄中,通常採用service to worker模式實現,而service to worker模式可由集中控制器模式,派遣器模式和Page Helper模式組成。而Struts只實作了MVC的View和Controller兩個部分,Model部分需要開發者自己來實現,Struts提供了抽象類別Action使開發者能將Model應用於Struts框架中Model是代表元件狀態和低階行為的部分,它管理自己的狀態並且處理所有對狀態的操作,model自己本身並不知道使用自己的view和controller是誰,系統維護著它和view之間的關係,當model發生了改變系統還負責通知相應的view。

  View代表了管理model所含有的資料的一個視覺上的呈現。一個Model可以有一個以上的View,但是Swing中卻很少有這樣的情況。

  Controller管理model和使用者之間的互動的控制。它提供了一些方法去處理當model的狀態發生了變化時的情況。

php中的MVC模式運用
首先我來舉個例子:
一個簡單的文章顯示系統
簡單期間,我們假定這個文章系統是只讀的,也就是說這個例子將不涉及文章的發布,現在開始了。
由於只涉及資料庫的讀取,所以我定義了兩個interface

Interface DataOperation 
{ 
   public function select($info); 
   public function selectNum($info); 
}

上面這interface定義了讀取資料的接口,select方法將返回所需要的文章。 selectNum方法傳回文章的總數,這是分頁顯示時所用到的。 $info是一個陣列,用來存放查詢條件

Interface DataSource 
{ 
   public static function getInstance(); 
}

這裡我們假定我們操作的是資料庫,DataSource定義一個介面,所有實作該介面的實例類別將會得到一個靜態物件

Interface Controller 
{ 
   public function pop(); 
   public function push(); 
   public function execute(); 
} 
Interface View 
{ 
   public function display(); 
}

好了,我們來實作.
下面定義一個類別來實作DataSource介面,這個類別運用了單例模式

class DataBaseSource implements DataSource 
{ 
   public static $instance = null; 
   public static function getInstance() 
   { 
       if(self::$instance == null) 
       { 
           self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456"); 
       } 
       return self::$instance; 
   } 
}

定義一個抽象類別來實作DataOperation,我們要共用一個資料庫連線,所以我在抽象類別中將這個資料庫物件初始化,這樣,所有的子類別都能共享這個物件

abstract class DataBaseOperation implements DataOperation 
{ 
   protected $db = null;  
   public function construct() 
   { 
       $this->db = DataBaseSource::getInstance(); 
   } 
   public function select($info); 
}

下面我來寫一個業務子類別來實作抽象類別DataBaseOperation

class Tech extends DataBaseOperation 
{ 
   public function select($info) 
   { 
       //在这里实现你的代码 
   } 
   public function selectNum($info) 
   { 
       //在这里实现你的代码 
   } 
}

業務邏輯層我們實作了,下面是控制層

class ViewController implements Controller 
{ 
   private $mod = array(); 
   public function push($key,$value); 
   { 
       //实现你的代码,将类注册进$this->mod; 
   } 
   public function pop($key) 
   {         
       //实现你的代码,将$this->mod[$key]值为null; 
   } 
   public function execute($key) 
   { 
       //在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理 
   } 
}

#好了,下面是表現層,這裡將實現Interface View

abstract ArticleView implements View 
{ 
   protected $smarty = null; 
   public function construct() 
   { 
       $this->smarty = new Smarty(); 
       ///下面你可以定义smarty的一些属性值 
   } 
}

具體的頁面,例如科技文章的顯示頁面

class TechArticleView extends ArticleView 
{ 
   public function display() 
   { 
       //实现你的代码,调用Tech类和更多的DataBaseOperation子类 
   } 
}

好了,下面是總入口index.php

try 
{ 
   $viewController = new ViewController(); 
   $viewController->push("tech",TechArticleView);   
//持续的增加   
   $mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"]; 
   //最后 
   $viewController->execute($key); 
} 
catch(
Exception
 $e) 
{ 
       //如何处理异常就是你的事了 
}

以上是php中的MVC模式運用技巧範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn