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.MVC的模板标签系统(一)
Sep 05 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
php时间计算相关问题小结
May 09 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 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下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
2011/06/09 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
Python多线程实例教程
2014/09/06 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
应届生保险求职信
2013/11/11 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
廉政承诺书2015
2015/04/28 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
2015入党自传书范文
2015/06/26 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
Redis数据同步之redis shake的实现方法
2022/04/21 Redis