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 Image Resize图片大小调整的函数代码
Jan 17 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
php中require和require_once的区别说明
Feb 27 PHP
php写的AES加密解密类分享
Jun 20 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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
20个PHP常用类库小结
2011/09/11 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
php 数组元素快速去重
2017/05/05 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
详解如何使用Vue2做服务端渲染
2017/03/29 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
2017/09/18 jQuery
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
SQL Server笔试题
2012/01/10 面试题
学校学雷锋活动总结
2014/06/26 职场文书
公证委托书
2014/08/01 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
总结python多进程multiprocessing的相关知识
2021/06/29 Python
人民币符号
2022/02/17 杂记
JavaScript获取URL参数的方法分享
2022/04/07 Javascript