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缩略图生成程式(需要GD库支持)
Mar 06 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
php实现过滤UBB代码的类
Mar 12 PHP
PHP实现上传文件并存进数据库的方法
Jul 16 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
PHP实现动态创建XML文档的方法
Mar 30 PHP
Laravel实现ApiToken认证请求
Oct 14 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 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技巧与注意事项分析
2011/02/03 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
js三种排序算法分享
2012/08/16 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
.NET现在共支持多少种语言
2014/02/26 面试题
导游词300字
2015/02/13 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
网络舆情信息简报
2015/07/21 职场文书
环保建议书作文500字
2015/09/14 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
高二语文教学反思
2016/02/16 职场文书
python基础详解之if循环语句
2021/04/24 Python
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android