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 相关文章推荐
Mysql的常用命令
Oct 09 PHP
用PHP 4.2书写安全的脚本
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
基于Zookeeper的使用详解
May 02 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
Laravel 5 学习笔记
Mar 06 PHP
php实现源代码加密的方法
Jul 11 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 PHP
laravel框架创建授权策略实例分析
Nov 22 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获取当前网址及域名的实现代码
2013/06/23 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
2014/01/02 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
python 数据加密代码
2008/12/24 Python
centos系统升级python 2.7.3
2014/07/03 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
Python虚拟环境venv用法详解
2020/05/25 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
公务员保密承诺书
2014/03/27 职场文书
关爱残疾人标语
2014/06/25 职场文书
党员一帮一活动总结
2014/07/08 职场文书
科技活动总结范文
2015/05/11 职场文书
合同审查法律意见书
2015/06/04 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android