程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中的MVC模式運用

php中的MVC模式運用

編輯:關於PHP編程

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);
    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)
{
        //如何處理異常就是你的事了
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved