[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) 

        //如何处理异常就是你的事了 
}

转载于:https://www.cnblogs.com/yibaidian/p/4108444.html

php中的MVC模式运用相关推荐

  1. PHP如何用mvc,在PHP中使用MVC模式进行开发

    1 ,软件结构发展过程中的3个阶段: Model1模式 , Model2模式 , MVC模式 1>Model1最重要的特点就是没有分层的概念 , 也就是说把界面 和业务逻辑的处理放在一个文件中来 ...

  2. FleaPHP 开发指南 - 2. FleaPHP 中的 MVC 模式

    理解 FleaPHP 中,MVC 模式是如何实现的,以及其特点,可以帮助你更好的运用 FleaPHP. 什么叫做设计模式? 简单来说,设计模式(Pattern)就是解决某一类问题的特定方法.由于这种特 ...

  3. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第43讲:PHP程序设计中的MVC模式

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第43讲:PHP程序设计中的MVC模式 模型(M)-视图(V)-控制器(C)mvc是一种软件设计模式,通过MVC思想进行实例开发和程序设计.     在前面的 ...

  4. WinForm中的MVC模式--MVP模式

    本文主要介绍MVC模式在WINFORM中的实现,其实砖家们都称它为MVP模式,小弟E文不太好,真的是记不住那个P怎么拼写的.. MVC模式主要解决的问题就是将表示层和业务层进行分离,在以往做WINFO ...

  5. 设计模式中,MVC模式与MVT模式的区别

    1.MVC模式 有一种程序设计模式叫MVC,其核心思想是分工.解耦,让不同的代码块之间降低耦合,增强代码的 可扩展性和可移植性,实现向后兼容. MVC的全拼为Model-View-Controller ...

  6. HTML5开发中使用MVC模式

    公司上周举办了一次编程马拉松,时间为两天,我当然用了lufylegend.js,为了让代码看起来更整洁一些,尝试着用javascript写了一个小的MVC框架,并开发了一个简单的demo,由于时间太短 ...

  7. 谈 三层结构与MVC模式的区别

    谈 三层结构与MVC模式的区别 在CSDN和园子里有朋友谈到三层与MVC的区别,以前也有人抛出这个问题,本人对来公司面试的朋友也偶乐会提这方面的问题.     那么我也来讲讲我对这两者的理解吧.    ...

  8. 第80节:Java中的MVC设计模式

    第80节:Java中的MVC设计模式 前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn ...

  9. 浅析三层架构与MVC模式的区别

    浅析三层架构与MVC模式的区别 三层架构介绍: (点击链接即可见三层架构) MVC模式介绍: MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(co ...

最新文章

  1. 二叉树结点地址小错误
  2. 30岁自学python找工作-程序员自学Python开发,20到30岁几乎决定了你的未来!
  3. 把工程部署在tomcat的root路径下
  4. mysql xtrabackup备份工具使用
  5. js粘贴板为什么获取不到图片信息_JavaScript 学习笔记(3):图片库
  6. flash activex java_Adobe flash player ActiveX和NPAPI和PPAPI 这三个软件有什么区别?
  7. python基础入门大作业怎么做_【百度飞桨】零基础Python课程大作业
  8. buffsize 缓冲区的大小多少合适_对于Redis性能指标监控!你了解多少?
  9. 初识 npm script : 用 npm init 快速创建项目
  10. java每轮排序结果_【算法队列面试题】面试问题:java选择题… - 看准网
  11. Mysql数据库分库和分表方式(常用)
  12. 【抠图工具】图片、视频自动抠图(VideoMatting)
  13. 2021-05-11
  14. 电工学复习【7】-- 集成运算放大器
  15. android x86 win8 双系统,win8.1安卓双系统安装教程:安卓win8.1二合一双系统安装步骤...
  16. 2022国内TMS运输管理系统排行榜
  17. Anchor-based 与 Anchor-free
  18. w7怎么修改计算机用户名,教您电脑用户名怎么修改
  19. 直流无刷电机及Matlab/Simulink驱动仿真
  20. c语言中哪个键是逐行运行的,c语言中的快捷键有哪些?

热门文章

  1. 网络营销——网络营销专员如何做好网站外链优化工作?
  2. 网站建设不曾止步,持续优化才有未来!
  3. Linux内核链表交换节点,[笔记]Linux内核链表:结点的插入、删除以及链表的遍历...
  4. map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...
  5. android悬浮窗按钮在哪,android——悬浮窗控件Toast
  6. 服务器跑python程序_远程编写+调试服务器上的Python程序
  7. python函数概述_Python概述
  8. sdi线缆标准_Roland V1SDI——专业、便携、高性价比的SDI摄像机直播解决方案
  9. 开发日记-20190902 关键词 读书笔记《Unix环境高级编程(第二版)》DAY 7
  10. 开发日记-20190522 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》