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邮件类
Jan 03 PHP
Php注入点构造代码
Jun 14 PHP
php判断文件夹是否存在不存在则创建
Apr 09 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
php中关于长度计算容易混淆的问题分析
May 27 PHP
功能强大的PHP发邮件类
Aug 29 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 PHP
深入分析PHP设计模式
Jun 15 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
curl和libcurl的区别简介
2015/07/01 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
javascript 闭包
2011/09/15 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
js获取本日、本周、本月的时间代码
2020/02/01 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python实现基本进制转换的方法
2015/07/11 Python
Python3 操作符重载方法示例
2017/11/23 Python
python实现kMeans算法
2017/12/21 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
基于python plotly交互式图表大全
2019/12/07 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
Django-migrate报错问题解决方案
2020/04/21 Python
python操作链表的示例代码
2020/09/27 Python
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
土木工程专业大学毕业生求职信
2013/10/13 职场文书
部队党性分析材料
2014/02/16 职场文书
采购经理岗位职责
2014/02/16 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
房屋维修申请报告
2015/05/18 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android