PHP中的MVC运用

php中的MVC模式运用

11.15.2011, 架构, by .

首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个interface

1Interface DataOperation
2{
3    public function select($info);
4    public function selectNum($info);
5}

上面这interface定义了读取数据的接口,select方法将返回所需要的文章。selectNum方法返回文章的总数,这是分页显示时用到的。$info是一个数组,用来存放查询条件

1Interface DataSource
2{
3    public static function getInstance();
4}

这里我们假定我们操作的是数据库,DataSource定义一个接口,所有实现该接口的实例类将得到一个静态对象

01Interface Controller
02{
03    public function pop();
04    public function push();
05    public function execute();
06}
07Interface View
08{
09    public function display();
10}

好了,我们来实现.
下面定义一个类来实现DataSource接口,这个类运用了单例模式

01class DataBaseSource implements DataSource
02{
03    public static $instance = null;
04    public static function getInstance()
05    {
06        if(self::$instance == null)
07        {
08            self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456");
09        }
10        return self::$instance;
11    }
12}

定义一个抽象类来实现DataOperation,我们要共享一个数据库连接,所以我在抽象类中将这个数据库对象初始化,这样,所有的子类都能共享这个对象

01abstract class DataBaseOperation implements DataOperation
02{
03    protected $db = null;
04    public function __construct()
05    {
06        $this->db = DataBaseSource::getInstance();
07    }
08    public function select($info);
09    public function select($info);
10}

下面我来写一个业务子类来实现抽象类DataBaseOperation

01class Tech extends DataBaseOperation
02{
03    public function select($info)
04    {
05        //在这里实现你的代码
06    }
07    public function selectNum($info)
08    {
09        //在这里实现你的代码
10    }
11}

业务逻辑层我们实现了,下面是控制层

01class ViewController implements Controller
02{
03    private $mod = array();
04    public function push($key,$value);
05    {
06        //实现你的代码,将类注册进$this->mod;
07    }
08    public function pop($key)
09    {        
10        //实现你的代码,将$this->mod[$key]值为null;
11    }
12    public function execute($key)
13    {
14        //在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理
15    }
16}

好了,下面是表现层,这里将实现Interface View

1abstract ArticleView implements View
2{
3    protected $smarty = null;
4    public function __construct()
5    {
6        $this->smarty = new Smarty();
7        ///下面你可以定义smarty的一些属性值
8    }
9}

具体的页面,例如科技文章的显示页面

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

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

01try
02{
03    $viewController = new ViewController();
04    $viewController->push("tech",TechArticleView);  
05//持续的增加  
06    $mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"];
07    //最后
08    $viewController->execute($key);
09}
10catch(Exception $e)
11{
12        //如何处理异常就是你的事了
13}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值