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的bbs设计(一)
Oct 09 PHP
刚才在简化php的库,结果发现很多东西
Dec 31 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php curl模拟post请求小实例
Nov 13 PHP
PHP多进程编程实例
Oct 15 PHP
实例讲解php数据访问
May 09 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
js移除事件 js绑定事件实例应用
2012/11/28 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
python根据京东商品url获取产品价格
2015/08/09 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
详解小白之KMP算法及python实现
2019/04/04 Python
python面试题小结附答案实例代码
2019/04/11 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python中的对数log函数表示及用法
2020/12/09 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
Android面试题附答案
2014/12/08 面试题
C# Debug和Testing相关面试题
2015/10/25 面试题
党校培训思想汇报
2014/01/03 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
职业规划实施方案
2014/06/10 职场文书
股权转让协议范本
2014/12/07 职场文书
离婚协议书格式
2015/01/26 职场文书
赔偿协议书
2015/01/27 职场文书
2019安全宣传标语大全
2019/08/14 职场文书