[size=5][color=Red]php中的MVC模式运用[/color][/size] 
首先我来举个例子: 
一个简单的文章显示系统 
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。 
由于只涉及数据库的读取,所以我定义了两个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); 
    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中的MVC模式运用的更多相关文章

  1. 生活中的MVC模式,一个吃货的理解。

    以下是生活中对于MVC模式的领悟,虽然可笑,轻喷. 2015年 8月 26日 M  => Model       模型 我认为叫做模具更好的理解.批量加工生产具有相同特征的东西.        ...

  2. 稍微谈一下 javascript 开发中的 MVC 模式

    随着前台开发日益受到重视,客户端代码比重日益增加的今天,如何在javascript开发里应用MVC模式,这个问题似乎会一直被提到,所以偶在这里粗略的谈一下自己的看法吧. MVC模式的基本理念,是通过把 ...

  3. 二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  4. 二十七、EFW框架BS系统开发中的MVC模式探讨

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  5. AngularJS中的MVC模式

    MVC根据逻辑关系,把前端项目的代码分为三个层次 model:模型,就是业务数据,前端项目中就是JS变量. view:视图,就是业务数据在用户面前的展现,前端项目中就是HTML. controller ...

  6. MVC模式介绍

    MVC是一种通过3个不同部分构造一个软件或组件的理想办法: 1.模型(Model):用于存储数据的对象. 2.视图(View):为模型提供数据显示的对象. 控制器(Controller):负责具体的业 ...

  7. 【转】利用MVC模式开发Java应用程序[组图]

    Java是一种面向对象的语言,是实现面向对象编程的强大工具.我们在实际编程中,应该运用并发挥其最大效能.但是,要利用面向对象编程思想,自己独立开 发出好的Java应用程序,非凡是大.中型程序,并不是一 ...

  8. Dot Net设计模式—MVC模式

    1 MVC设计模式简介 MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离.MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定 ...

  9. Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

    前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的 ...

随机推荐

  1. eclipse安装lombok插件

    1:下载jar https://projectlombok.org/download.html 2:双击下载的lombok.jar 安装 3:如果eclipse没有安装到默认目录,需要手动选择ecli ...

  2. shell编程技术之-基础知识

    一.脚本结构 linux下shell的脚本,是将一系列命令序列写在一个文本文件,而这个文本文件时可执行的.相对命令行来说,开发效率提高.因此他的构架有2部分构成#!和命令序列.其中#!指明此脚本是用哪 ...

  3. bzoj4005[JLOI2015]骗我呢

    http://www.lydsy.com/JudgeOnline/problem.php?id=4005 神题~远距离orz 膜拜PoPoQQQ大神 #include<cstdio> #i ...

  4. VMware Workstation 精致汉化系列 使用方法

    http://kuai.xunlei.com/d/QqGABAKChQBwMzxR983   迅雷快传 XP系统之家-温馨提示: VMware Workstation 精致汉化系列 使用方法:1.安装 ...

  5. hdu4623:crime 数学优化dp

    鞍山热身赛的题,也是去年多校原题 题目大意: 求n个数的排列中满足相邻两个数互质的排列的数量并取模 当时的思路就是状压dp.. dp[i][state]  state用二进制记录某个数是否被取走,i ...

  6. poj3708:函数式化简+高精度进制转换+同余方程组

    题目大意 给定一个函数 找出满足条件   等于 k 的最小的x m,k,d已知 其中 m,k 很大需要使用高精度存储 思路: 对 函数f(m)进行化简 ,令t=ceil( log(d,m) ) 可以得 ...

  7. 页面onclick()中传值问题

    html中onclick()里面传变量到javascript中的问题,小小的记录下: 传变量的话一定要加  '' <span onclick="sellGoods('${session ...

  8. 传智播客 Html基础知识学习笔记

    HTML基础 <p></p>标志对用来创建一个段落,,<p>标志还可以使用align属性, 它用来说明对齐方式 语法是:<p align="&quo ...

  9. hdu 5159 Card (期望)

    Problem Description There are x cards on the desk, they are numbered from 1 to x. The score of the c ...

  10. javascript 中 "!function(){}() " 是什么意思?

    叹号后面跟函数!function和加号后面跟函数+function都是跟(function(){})();这个函数是一个意思,都是告诉浏览器自动运行这个匿名函数的,因为!+()这些符号的运算符是最高的 ...