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开发模式(简写版)
Mar 15 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php面向对象编程self和static的区别
May 08 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP实现的统计数据功能详解
Dec 06 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
PHP的curl函数的用法总结
Feb 14 PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 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 mkdir()定义和用法
2009/01/14 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
js+css实现select的美化效果
2016/03/24 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
vue中接口域名配置为全局变量的实现方法
2018/09/20 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
python远程连接MySQL数据库
2019/04/19 Python
python输出决策树图形的例子
2019/08/09 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
python爬虫---requests库的用法详解
2020/09/28 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
天网面试题
2013/04/07 面试题
几个Linux面试题笔试题
2016/08/01 面试题
毕业生求职的求职信
2013/12/05 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
创业培训计划书
2014/05/03 职场文书
2014年统战工作总结
2014/12/09 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
如何撰写促销方案?
2019/07/05 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python