php中的MVC模式运用技巧


Posted in PHP onMay 03, 2007

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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
用cookies来跟踪识别用户
Oct 09 PHP
用Flash图形化数据(一)
Oct 09 PHP
global.php
Dec 09 PHP
php+mysql 实现身份验证代码
Mar 24 PHP
php中http_build_query 的一个问题
Mar 25 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
PHPUnit安装及使用示例
Oct 29 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
PHP调用其他文件中的类
Apr 02 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 PHP
php下实现折线图效果的代码
Apr 28 #PHP
php下的权限算法的实现
Apr 28 #PHP
php 中的str_replace 函数总结
Apr 27 #PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 #PHP
escape unescape的php下的实现方法
Apr 27 #PHP
mysql 全文搜索 技巧
Apr 27 #PHP
mysql 搜索之简单应用
Apr 27 #PHP
You might like
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
php实现的SESSION类
2014/12/02 PHP
Prototype使用指南之selector.js说明
2008/10/26 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
微信小程序模板template简单用法示例
2018/12/04 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
python 多线程应用介绍
2012/12/19 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
linux面试题参考答案(5)
2016/11/05 面试题
优秀应届生推荐信
2013/11/09 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
2014村务公开实施方案
2014/02/25 职场文书
父母对孩子的寄语
2014/04/09 职场文书
文体活动总结范文
2014/05/05 职场文书
设计师求职信
2014/07/01 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
公司门卫岗位职责
2015/04/13 职场文书
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技