理解PHP中的MVC框架编程

什么是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方式对于很多人来讲可能是一个全新、陌生的概念,但是一旦你转换到了这样一个概念,那么要转回去将是件相当困难的事情。

PHP: 手把手编写自己的 MVC 框架实例教程 1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。   MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自... 阅读详情

相关推荐

简单原生php MVC框架

简单原生php MVC框架 ,轻量级的PHP数据库框架, 提高开发效率!

深入理解PHP的mvc框架

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写 Model(模型)表示应用程序核心(比如数据库记录列表)。 View(视图)显示数据(数据库记录)。 Controller(控制器)处理输入(写入数据库记录)。 简单通俗的讲: Model层就是对数据库的操作,比如想要搭建一个网站,我...

CaseyWei 442

【冷冻电镜】RELION5.0使用教程总结

对于您自己的数据,您可能希望使用各种倾斜系列对齐方法,然后比较每种方法生成的断层扫描图像的质量(参见下一步)。通过检查 CtfFind job 的 tilt_series 目录中的star文件来检查几个倾斜系列的散焦值。GitHub上也有人反应这个问题,目前我的解决方案是下载了较低版本的CTFFIND的,降级到4.1.10可以成功运行。此外,logfile.pdf 文件包含所有显微照片的有用参数图,例如散焦、像散、估计分辨率等,以及整个数据集中这些值的直方图。的目录,以及指向此目录的符号链接。

进阶中的程序员吃吃的博客 4220

php mvc框架的理解

PHP MVC框架是遵循MVC设计模式的一类库或工具集合,用于简化Web应用程序的开发过程。这些框架提供了一种结构化的方式来组织代码,并且通常包含一系列的功能,比如数据库抽象层、模板引擎、用户认证等,从而让开发者可以专注于业务逻辑而不是底层的技术细节。定义MVC组件模型(Model):代表数据结构。它处理与数据库相关的所有事情,如存储、检索和更新数据。视图(View):负责展示信息给用户。它是应用程序的外观,即用户看到并与其交互的部分。控制器(Controller):作为模型和视图之间的桥梁。

x3088的博客 730

Tomcat漏洞——弱口令爆破

靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。

weixin_57379923的博客 909

Android Qcom USB Driver学习(五)

在前面的第二期中,我们知道一些非标的USB的充电类型Floatingcharger,其具有和普通DCP相似的大电流能力,但在最初检测的时候会限制Inputcurrentlimit到100mA,来进行检测是否是SDP类型,所以要支持大电流输入就需要进行vote操作,前面的几篇都有涉及,所以本文学习一下pmicusbcharger都相关的vote机制。...

Android驱动开发 2900

请解释PHP中的MVC架构

模型负责处理数据的存储和检索,然后将处理后的数据传递给控制器,以供显示在视图中。在PHP中,有许多PHP框架,如Laravel、Symfony、CodeIgniter等,提供了MVC架构的支持和工具,帮助开发者更轻松地构建和管理Web应用程序。如果需要添加新的功能或更改应用程序的行为,您可以通过修改模型、视图或控制器的一个或多个组件来实现这些更改,而不必对整个应用程序进行大规模更改。由于模型、视图和控制器的分离,您可以更容易地对应用程序的不同部分进行单独的修改,而不会影响其他部分。

周祥平程序专栏 577

关于PHP MVC简单的框架构造

MVC是这三个单词的缩写: Model 模型,专门用来处理数据 View 视图,专门用来显示页面(HTML文件) Controller 控制器(中控器):用来分发任务(命令模型处理数据、命令视图显示数据) 模型封装的原则: 使用OOP思想描述数据表,一张表就是一个类,这个表的所有操作(增删查改),封装到类的方法中。 模型层主要是操作数据库,我们之前封装一个PDO类 模型封装的原则: 使用OOP思想...

weixin_43781157的博客 432

OpenModelica入门指南:从下载安装到第一个仿真模型(附常见问题解答)

本文提供OpenModelica开源项目的完整入门指南,涵盖从下载安装、界面熟悉到构建首个仿真模型的全过程。通过创建经典的阻尼震荡系统实例,详细讲解组件拖放、参数设置、仿真运行及结果分析,并附有常见问题解决方案,帮助工程师和研究人员快速上手这一强大的多领域物理系统建模与仿真工具。

weixin_29239279的博客 726

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3591

浅析php中mvc框架,理解PHP中的MVC框架编程

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

weixin_32818917的博客 416

基于Simulink的H∞鲁棒控制器设计与仿真建模示例

本文介绍了基于Simulink的H∞鲁棒控制器设计与仿真方法。针对质量-弹簧-阻尼系统存在±50%刚度不确定性的问题,详细阐述了从构建广义被控对象、设计性能加权函数,到使用hinfsyn综合控制器的完整流程。通过Simulink仿真验证,所设计的H∞控制器在参数摄动和外部扰动下均保持良好性能,位移控制误差小于2%,扰动衰减超过20dB。相比传统PID控制,H∞方法展现出显著鲁棒性优势。文章还总结了工程实践中的加权函数调参技巧、控制器降阶方法,并展望了μ-综合等扩展方向,为处理系统不确定性提供了实用解决方案。

amy_mhd的博客 70

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

[导读]【什么是MVC?】   MVC是一个可以让你把“三个部分(即MVC的全称,Model、View、Controller)”谐调地组成一个复杂应用程序的概念。一辆汽车就是一个在现实生活中非常好的MVC例子。我们看车都看两个View(显示)部分:内部和外部。而这两个都离不开一个Controller(控制者):司机。刹车系统、方向盘和其他操控系统代表了 【什么是MV...

airon2015的博客 135

第81篇:Vibe Coding时代:LangGraph + Eval评估体系实战,解决 Agent 优化全靠感觉的问题

本文介绍了一个为LangGraph Coding Agent设计的评估体系解决方案。文章首先指出了当前AI Coding Agent开发中的常见问题:优化过程缺乏客观评估标准,导致改进效果难以量化。随后提出了一个完整的评估框架,包括评估指标(任务成功率、质量指标、安全指标、成本指标和流程指标)、项目结构设计和评估案例集。 核心内容包括: 设计了JSON格式的评估案例集,覆盖正常任务、边界任务和高风险场景 实现了模拟Agent输出的演示代码 构建了多维度评分系统,包括关键词匹配、禁用词检测和成本评估 提供了评

sundong_81的博客 47

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

<?phpabstract class FR_Auth extends FR_Module{// {{{ __construct()function __construct(){parent::__construct();}// }}}// {{{ authenticate()abstract function authenticate();// }}}// {{{ __destruct()fun...

weixin_42515093的博客 166

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

我是一个PEAR尤其是PEAR_Error类的爱好者。PHP5引入了一个新的内建类“Exception”?取代了PEAR_Error。但是PEAR_Error拥有一些比Exception还要实用的特性。所以,在此系列文章中的MVC框架实例将用到它来做错误处理。无论如何,我还是要用到Exception获得从构造器中的错误,因为它们本身不能传回错误。 设计这些基础类的目的有如下几点: 利用...

编程是技术,更是艺术。 127

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[转]理解 PHP 中的 MVC 框架编程---by 郭碧青

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

iteye_17113的博客 52

php mvc框架开发源码下载,手把手编写自己的 PHP MVC 框架实例教程

1什么是MVCMVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。软件系统通过对自身基本部份分离的...

weixin_30831105的博客 689

php mvc基本流程,手把手编写PHP框架 深入了解MVC运行流程

1 什么是MVCMVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。PHP中MVC模式也称Web MVC,从上世纪70年代进化而来。MVC的目的是实现一种动态的程序设计,便于后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除 此之外,此模式通过对复...

weixin_33728584的博客 358
上一篇: PHP开发大型Web应用浅析
下一篇: 现代Java Web开发框架分析
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值