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 和 COM
Oct 09 PHP
如何对PHP程序中的常见漏洞进行攻击(上)
Oct 09 PHP
mysql 搜索之简单应用
Apr 27 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
PHP中if和or运行效率对比
Dec 12 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
基于PHP给大家讲解防刷票的一些技巧
Nov 18 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
php操作redis数据库常见方法实例总结
Feb 20 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原理之Session Gc的一个小概率Notice
2011/04/12 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
Python温度转换实例分析
2018/01/17 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python 获取图片分辨率的方法
2019/01/08 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
pymysql 开启调试模式的实现
2019/09/24 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
荷兰手表网站:Watch2Day
2018/07/02 全球购物
档案管理员岗位职责
2013/12/01 职场文书
品牌转让协议书
2014/08/20 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
团组织推优材料
2014/12/29 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Python函数中的不定长参数相关知识总结
2021/06/24 Python
Rust中的Struct使用示例详解
2022/08/14 Javascript