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 zip文件解压类代码
Dec 02 PHP
PHP学习笔记之数组篇
Jun 28 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
php判断表是否存在的方法
Jun 18 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
php微信公众平台开发(三)订阅事件处理
Dec 06 PHP
如何通过View::first使用Laravel Blade的动态模板详解
Sep 21 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
Sep 30 PHP
php实现银联商务公众号+服务窗支付的示例代码
Oct 12 PHP
Laravel框架控制器,视图及模型操作图文详解
Dec 04 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
react router 4.0以上的路由应用详解
2017/09/21 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
vue实现axios图片上传功能
2019/08/20 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
Python编程中的反模式实例分析
2014/12/08 Python
python迭代器与生成器详解
2016/03/10 Python
python基础教程项目二之画幅好画
2018/04/02 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
2019/09/02 Python
python获取array中指定元素的示例
2019/11/26 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
高中毕业生的个人自我评价
2014/02/21 职场文书
施工安全责任书
2014/04/14 职场文书
电教室标语
2014/06/20 职场文书
关于环保的活动方案
2014/08/25 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技
Golang并发工具Singleflight
2022/05/06 Golang