转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
理解PHP中的MVC编程之MVC框架简介         ★★★★

理解PHP中的MVC编程之MVC框架简介

作者:闵涛 文章来源:闵涛的学习笔记 点击数:594 更新时间:2009/4/23 11:03:16
  【什么是MVC?】

  MVC是一个可以让你把“三个部分(即MVC的全称,Model、View、Controller)”谐调地组成一个复杂应用程序的概念。一辆汽车就是一个在现实生活中非常好的MVC例子。我们看车都看两个View(显示)部分:内部和外部。而这两个都离不开一个Controller(控制者):司机。刹车系统、方向盘和其他操控系统代表了Model(模型):他们从司机(Controller)那里取得控制方法然后应用到内部和外观(View)。

  【网络上的MVC】

  MVC框架所涵盖的概念相当简单并且极度灵活。基本的概念就是,你有一个单独的控制器(如index.php)用来控制所有建立在参数请求基础上的框架内应用程序。这个控制器通常包含了(最小程度上)一个定义模型的参数、一个事件和一个GET参数。这样控制器就能确认所有的请求然后运行相应的事件。打个比方来说,一个像这样/index.php?module=foo&event=bar的请求很有可能就是用来载入一个名叫foo的类,然后运行foo::bar()[就是其中的bar()函数]。这样做的好处有:

  一个对应所有应用程序的接口

  同时维护一个应用程序内无数的代码非常麻烦,因为每一段代码都有自己的相对路径、数据库链接、验证等等。而这样做就免除你在这方面的烦恼,允许你合并并重复使用代码

  【为什么要创建作者自己的MVC框架?】

  迄今为止,我没有见到过太多用PHP写的MVC框架。事实上我仅仅知道一个-Solar,是完全用PHP5写的。另外一个是Cake,一个试图成为PHP的RoR(Ruby on Rails-一个Ruby语言开源网络框架)。我自己对这两个框架都有一些不满意的地方:它们都没有利用到PEAR,Smarty等所包含的现有代码;现在的Cake还比较紊乱;最后,Solar是一个绝大部分由一个人写的作品(我无意说其作者Paul不是一个好人或者好程序员)。这些问题可能并不会让你否认它们,而且很有可能你根本不关心这些问题。但是正因为如此,我请各位尽可能地审视它们。

  【老方式】

  如果回到2001看自己写的代码,作者有可能找到一个叫template.txt的文件,它看起来像这样:www.phpv.net 转载请注明出处

<?php
 require_once('config.php'); // Other requires, DB info, etc.

 $APP_DB = 'mydb';
 $APP_REQUIRE_LOGIN = false; // Set to true if script requires login
 $APP_TEMPLATE_FILE = 'foo.php'; // Smarty template
 $APP_TITLE = 'My Application';

 if ($APP_REQUIRE_LOGIN == true) {
  if (!isset($_SESSION['userID'])) {
   header("Location: /path/to/login.php");
   exit();
  }
 }

 $db = DB::connect('mysql://'.$DB_USER.':'.$DB_PASS.'@localhost/'.$APP_DB);
 if (!PEAR::isError($db)) {
  $db->setFetchMode(DB_FETCHMODE_ASSOC);
 } else {
  die($db->getMessage());
 }

 // Put your logic here
 // Output the template

 include_once(APP_TEMPLATE_PATH.'/header.php');
 include_once(APP_TEMPLATE_PATH.'/'.$APP_TEMPLATE_FILE);
 include_once(APP_TEMPLATE_PATH.'/footer.php');
?>
  天哪,只是看这些代码都会让我有退缩的欲望。这段代码的概念就是确保每一个应用程序都能适用于这个处理方法,比如我可以简单地将template.txt拷进myapp.php,改变一些变量,瞧,它就能运行起来了。尽管如此,这个组织严密的处理方法存在一些严重的缺点:

  如果我的老板想让作者用myapp.php在一些情况下输出PDF、一些情况下输出HTML、一些情况下(直接提交的XML请求)SOAP,我该怎么办?

  如果这个应用程序需要IMAP或LDAP验证,我该怎么办?

  我该如何处理各种不同的代码(包括编辑、升级和删除)?

  我该如何处理多级验证(管理员 vs. 非管理员)?
我该如何启用输出缓存?www.phpv.net 转载请注明出处

  【新方式】

  将所有东西都扔进这个MVC框架,你会发现生活是如此简单。请对比以下代码:

<?php
 class myapp extends FR_Auth_User
 {
  public function __construct()
  {
   parent::__construct();
  }

 public function __default()
 {
  // Do something here
 }

 public function delete()
 { }

 public function __destruct()
 {
  parent::__destruct();
 }
}

?>
  注意这段代码显然不是用来链接到一个数据库、判断一个用户是否已经登陆、或者输出任何其他信息。控制器掌握了所有的一切。

  如果我想验证LDAP,我可以建立FR_Auth_LDAP。控制器可以识别某些输出方法(比如$_GET['output'])并可以随时转换成PDF或者SOAP。事件处理delete,只负责删除,其他的它都不管。因为这个模块拥有一个FR_User类的实例,它可以简单地判断一个用户是否已经登陆等等。Smarty,作为模板引擎控制缓存是理所当然的,但是控制器同样可以控制一部分缓存。

  从前面讲的老方式到MVC方式对于很多人来讲可能是一个全新、陌生的概念,但是一旦你转换到了这样一个概念,那么要转回去将是件相当困难的事情。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台