您好,欢迎来到思海网络,我们将竭诚为您提供优质的服务! 诚征网络推广 | 网站备案 | 帮助中心 | 软件下载 | 购买流程 | 付款方式 | 联系我们 [ 会员登录/注册 ]
促销推广
客服中心
业务咨询
有事点击这里…  531199185
有事点击这里…  61352289
点击这里给我发消息  81721488
有事点击这里…  376585780
有事点击这里…  872642803
有事点击这里…  459248018
有事点击这里…  61352288
有事点击这里…  380791050
技术支持
有事点击这里…  714236853
有事点击这里…  719304487
有事点击这里…  1208894568
有事点击这里…  61352289
在线客服
有事点击这里…  531199185
有事点击这里…  61352288
有事点击这里…  983054746
有事点击这里…  893984210
当前位置:首页 >> 技术文章 >> 文章浏览
技术文章

理解PHP中的MVC框架简介

添加时间:2014-8-7 16:50:23  添加: 思海网络 
 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 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方式对于很多人来讲可能是一个全新、陌生的概念,但是一旦你转换到了这样一个概念,那么要转回去将是件相当困难的事情。

关键字:MVC、框架、PHP

分享到:

顶部 】 【 关闭
版权所有:佛山思海电脑网络有限公司 ©1998-2024 All Rights Reserved.
联系电话:(0757)22630313、22633833
中华人民共和国增值电信业务经营许可证: 粤B1.B2-20030321 备案号:粤B2-20030321-1
网站公安备案编号:44060602000007 交互式栏目专项备案编号:200303DD003  
察察 工商 网安 举报有奖  警警  手机打开网站