`

理解PHP中的MVC框架编程

    博客分类:
  • PHP
阅读更多
什么是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的文件,它看起来像这样:
<?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. 非管理员)?
我该如何启用输出缓存?
新方式
将所有东西都扔进这个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方式对于很多人来讲可能是一个全新、陌生的概念,但是一旦你转换到了这样一个概念,那么要转回去将是件相当困难的事情。
分享到:
评论

相关推荐

    phpMVC框架编程

    ### PHP MVC框架编程详解 随着Web开发技术的不断进步与成熟,PHP开发也逐渐步入了新的阶段,其中最具代表性的发展趋势之一就是采用MVC(Model-View-Controller)框架进行项目构建。MVC架构不仅提高了代码的可读性...

    PHP mvc框架

    在IT行业中,PHP是一种广泛应用的服务器端...这将有助于你更好地理解现有的PHP MVC框架,并在未来的工作中更高效地使用它们。通过实践,你还能学习到如何组织代码,遵循最佳实践,以及如何设计可扩展和可维护的系统。

    自己手写PHP MVC 框架

    在自己手写PHP MVC框架的过程中,你可以深入理解这一模式的工作原理,提升编程技能。 **模型(Model)**: 模型是应用的核心,负责处理业务逻辑和数据管理。在PHP MVC框架中,模型类通常与数据库交互,执行增删改查...

    php简易MVC框架

    **PHP简易MVC框架详解** PHP简易MVC框架是由新浪的...总结,PHP简易MVC框架是一个学习MVC模式的良好起点,通过它,开发者可以深入理解Web开发的结构和流程,提升编程能力,并为将来使用更复杂的框架打下坚实的基础。

    简约版本 MVC 框架模型

    MVC(Model-View-Controller)是一种常见的软件设计模式,广泛应用于Web开发领域,尤其是PHP编程中。它的主要目的是将业务逻辑、数据处理和用户界面分离,使得各部分可以独立开发和维护,提高了代码的可读性和可维护...

    PHP的MVC框架TinyMVC

    **PHP的MVC框架TinyMVC详解** TinyMVC是一个基于PHP编程语言的轻量级MVC(Model-View-Controller)框架,旨在简化Web应用程序的开发,通过将业务逻辑、数据处理和用户界面分离,提高代码的可读性和可维护性。在深入...

    初始MVC框架,项目实战

    在PHP中,有很多流行的MVC框架,如Laravel、Symfony、CodeIgniter等。本教程可能以其中一个为例,带你逐步了解如何创建控制器、模型和视图。 - **创建控制器**:控制器是处理用户请求的第一步,它接收请求,处理...

    PHP入门培训教程PHP MVC框架核心类.pdf

    PHP MVC框架核心类是PHP入门培训教程中的一部分,该教程旨在帮助初学者快速掌握PHP编程语言并学习MVC框架的核心概念。该教程通过实例演示了框架核心类的设计和实现,帮助学习者快速理解MVC框架的核心思想。 ...

    PHPmvc框架项目

    本项目“PHPmvc框架”旨在提供一个自定义的、基于Model-View-Controller(模型-视图-控制器)设计模式的PHP框架,以简化开发流程并提高代码组织性。 首先,我们来详细了解一下MVC模式。MVC是一种软件设计模式,它将...

    PHP简单实现MVC框架路由功能源码

    本篇将深入探讨如何使用PHP简单实现MVC框架中的路由功能。 路由是MVC框架的核心部分,它负责解析用户请求并决定如何处理这些请求。在PHP中,我们可以创建一个简单的路由系统,用于映射URL到对应的控制器和方法。 ...

    mvc.rar_PHP MVC框架

    对于初学者而言,理解并实践PHP MVC框架可以帮助他们更好地掌握Web开发中的核心概念,提高编程效率。通过不断地学习和实践,可以进一步探索如Laravel、Symfony、Yii等成熟的PHP MVC框架,提升开发能力。

    一个基础完整的MVC框架

    通过实践这个基础MVC框架,你可以提升PHP编程技能,掌握Web开发的核心概念,并为更复杂的项目打下坚实的基础。同时,这也是一种学习面向对象编程和设计模式的良好途径。随着对MVC架构的理解加深,你将能够更好地适应...

    基于PHP的MVC框架核心技术研究与实现.pdf

    8. MVC模式在PHP中的实现:论文研究了MVC模式在PHP中的实现,旨在设计和实现一个基于PHP的MVC框架。 9. 框架的路由模式设计:论文解决了框架的路由模式问题,设计了一个高效的路由模式以满足企业级应用系统的需求。...

    基于PHP的禅道php mvc框架.zip

    【标题】"基于PHP的禅道php MVC框架"揭示了这个压缩包...通过学习和使用这个基于PHP的禅道php MVC框架,开发者不仅能提升PHP编程技能,还能更好地理解和运用MVC设计模式,为构建高效、可扩展的Web应用打下坚实基础。

    基于PHP的禅道phpmvc框架源码.zip

    2. **路由系统**:禅道phpmvc框架中的路由系统解析URL请求,将其映射到相应的控制器和方法,实现URL与功能的对应。 3. **控制器(Controller)**:控制器是MVC架构中的关键部分,它接收来自用户的请求,调用模型处理...

    PHP__单入口MVC模式实例

    - `MyMVC`:这个目录很可能是整个MVC框架的根目录,包含了模型、视图、控制器以及其他必要的文件和配置。 - `config`:配置文件通常包含数据库连接信息、路由设置等,用于设置应用的运行环境。 - `model`:存放模型...

    自已写的phpMVC框架

    【标题】: 自已写的phpMVC框架 【描述】: 这是一个个人开发的PHP MVC框架,体现了对Web应用程序设计模式的理解与实践。MVC(Model-View-Controller)架构模式是现代Web开发中常用的设计模式,它将业务逻辑、数据...

    初探PureMVC:使用PHP+MySQL+Flex结合PureMVC框架做了个Flex留言本

    标题中的“初探PureMVC:使用PHP+MySQL+Flex结合PureMVC框架做了个Flex留言本”揭示了本文将探讨如何使用PureMVC框架,结合PHP后端和MySQL数据库,构建一个基于Flex的前端留言本应用。PureMVC是一个轻量级、可扩展的...

    PHP+EasyUI+MVC框架+数据库脚本+人事管理

    通过学习和实践这个项目,开发者不仅可以掌握PHP编程基础,还能理解如何使用EasyUI创建用户友好的界面,同时熟悉MVC框架的设计思想,以及如何有效地管理和操作数据库。同时,这也是一个很好的机会,让大家能够互相...

    写你自己的MVC框架

    总结起来,编写一个MVC框架涉及多个层面,包括理解MVC模式、设计合理的架构、实现核心组件以及处理各种边缘情况。这不仅有助于提升编程技能,还能帮助我们更好地理解和使用现有的成熟框架,如 Laravel、Symfony 或 ...

Global site tag (gtag.js) - Google Analytics