PHP中的MVC运用

php中的MVC模式运用

11.15.2011, 架构, by admin.

首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个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接口,这个类运用了单例模式

01 class 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,我们要共享一个数据库连接,所以我在抽象类中将这个数据库对象初始化,这样,所有的子类都能共享这个对象

01 abstract 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

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

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

01 class 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

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

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

1 class 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}
10 catch(Exception $e)
11{
12 //如何处理异常就是你的事了
13}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值