用PHP深入分析MVC
在PHP中使用MVC越来越流行,尤其是在一些开源框架中。MVC足以应对大多数情况,但仍有一些情况不适合它,比如简单的个人博客。对于只有几百篇文章的博客来说,使用MVC让人觉得有些过于复杂。同样,对于新浪这样的门户网站,使用MVC会加载大量文件,对速度的影响是不可接受的。
当处理中型或以上的应用程序时,传统的面对面的基于过程的开发方法开始显得不足。即使我们能够快速完成需求,也会在需求变更后或者后期维护的时候,陷入我们前期搭建的陷阱。因此,用面向对象的方法实现MVC模式将为我们梳理程序架构提供一个清晰的思路。
什么是MVC?
MVC有各种各样的定义和解释。我们可以在维基或[2]中找到更详细的解释。我不打算也没有能力在这里给出深入的解释。从PHP开发的角度来看,MVC可以概括如下:
视图(视图):
说到视图,我们很多人都会想到模板引擎(比如Smarty等等)。实际上,它是各种各样的输出,比如html模板和Javascript文件。
模块(模型)
模块代表程序的逻辑,在企业应用程序中通常被称为业务逻辑层。一般来说,这一层所做的工作是将原始数据处理成有意义的数据序列,按照我们设计的数据结构进行存储,然后将这些数据提交给视图进行处理。通常,在模块中使用数据抽象类来处理数据操作。
模型通常包含用于处理数据库的函数。
控制器(控制器)。
控制器是所有WEB应用程序的第一站。它接受接收到的参数,如$_GET变量,然后做出相应的响应。
关于MVC是否适合PHP有很多争论。人们不断讨论MVC是否适合PHP[3],现在有很多MVC框架,比如PHP MVC framework[4]中列出的那些。那么,为什么人们如此热衷于MVC,为什么我们要在设计中使用MVC呢?
为什么要用MVC?
MVC最初是用来解决桌面GUI的编程问题。最早的MVC框架应该是孙在1999年提出的Model 2,后来演变成Struts。MVC给人们留下了深刻的印象,但是在使用的过程中,我们并没有认真思考为什么要使用MVC。
在传统的桌面应用中,一旦模型中有时间,我们就可以主动刷新视图界面,在后台显示变化。在Web应用程序中,我们似乎局限于传统的Http Request/Response模式,客户端似乎没有办法更新。这个讨论并不是说MVC不能用来开发WEB应用,而是说在某种程度上MVC并不是最适合的。
关于使用MVC的争论还有很多[1],但我相信所有习惯于使用MVC来组织自己项目的人,在被要求选择新的项目框架时,绝不会放弃MVC。
如何实现MVC?
下面是一个超简单的MVC结构实现。甚至数据源也使用内置的固定数组。虽然简单,但其实很多PHP框架的核心实现思路应该和这个差不多,只是有些框架提供了更多方便开发者使用的工具。我也想自己实现一个PHP框架,现在正在规划。也希望能从框架的开发中学到更多PHP的设计思路和方法。
Controller.php
包括模特。PHP ';包括查看。PHP ';类控制器{ private $模型=private $视图=公共函数控制器(){ $ this-Model=new Model();$ this-View=new View();}公共函数DoAction($ method=' default method ',$ params=array()){ if(empty($ method)){ $ this-default method();}else if(method_exists($this,$method)){ call _ user _ func(array($ this,$ method),$ params);} else { $ this-nonexisting _ method();} } public function link _ page($ name=' '){ $ links=$ this-model-getLinks();$ this-view-display($ link);$ result=$ this-model-getResult($ name);$ this-view-display($ result);}公共函数default method(){ $ this-br();回声"这是默认方法。";}公共函数nonexisting _ method(){ $ this-br();回声"这是不存在的方法。";}公共函数br(){ echo " ";} } $ Controller=新控制器();$ controller-DoAction(' link _ page ',' b ');$ controller-DoAction();=======================================型号。phpclass Model { private $ database=array(' a '=' hello world ',' b'='ok干得好,' c'='再见',);//@TODO连接数据库//运行查询并获取结果公开函数getResult($ name){ if(empty($ name)){ return FALSE;}if(in_array($name,array _ keys($ this-database)){ return $ this-database[$ name];} }公共函数getLinks(){ $ links=' Link A ';$ links .='链接' b ';$ links .='链接' c ';返回$ links } }=================================================================查看。PHP class View { public function display($ output){//ob _ start();回声$输出;}}
版权声明:用PHP深入分析MVC是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。