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中ADODB类详解
Mar 25 PHP
php下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
ezSQL PHP数据库操作类库
May 16 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
Jun 21 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
解析php中curl_multi的应用
Jul 17 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 PHP
php生出随机字符串
Jul 06 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 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
Zend的MVC机制使用分析(一)
2013/05/02 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
再谈javascript原型继承
2014/11/10 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
2017/04/18 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
python集合常见运算案例解析
2019/10/17 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
婚纱摄影师求职信范文
2014/04/17 职场文书
学校志愿者活动总结
2014/06/27 职场文书
绵山导游词
2015/02/05 职场文书
少先队中队工作总结2015
2015/07/23 职场文书