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 相关文章推荐
php中全局变量global的使用演示代码
May 18 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
深入理解PHP之OpCode原理详解
Jun 01 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
Laravel解决nesting level错误和隐藏index.php的问题
Oct 12 PHP
php swoft框架实例用法
Dec 22 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
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python编程实现希尔排序
2017/04/13 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
解决TensorFlow GPU版出现OOM错误的问题
2020/02/03 Python
幼儿园教师奖惩制度
2014/02/01 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2014年化验室工作总结
2014/11/21 职场文书
新郎答谢词
2015/01/04 职场文书
综合素质评价自我评价
2015/03/06 职场文书
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android