MVC框架示意图PHP版
- 格式:pdf
- 大小:386.70 KB
- 文档页数:2
php打造属于自己的MVC框架本篇先介绍一下php的MVC实现原理,我们框架的MVC部分也是基于此原理实现的,但是今天的代码并不是框架内的代码,仅仅为说明原理一、文件结构建立3个文件夹controller文件夹存放控制器文件view文件夹存放视图文件model文件夹存放数据文件建立1个index.php 作为唯一入口二、控制器我们在controller文件夹下建立一个democontroller.php文件,文件内容如下复制代码代码如下:<?phpclass DemoController{function index(){echo('hello world');}}/* End of file democontroller.php */这个文件里面我们只是建立了一个名为DemoController的对象并包含一个index的方法,该方法输出hello world。
下面在index.php中执行DemoController中index方法。
index.php的代码如下复制代码代码如下:<?phprequire('controller/democontroller.php');$controller=new DemoController();$controller->index();/* End of file index.php */运行index.php,ok如愿我们看到了我们久违的hello world。
这两个文件非常简单,但也揭示了一点点m vc的本质,通过唯一入口运行我们要运行的控制器。
当然controller部分应该是由uri来决定的,那么我们来改写一下index.php使他能通过uri来决定运行那个controller。
index.php改写代码如下:复制代码代码如下:<?php$c_str=$_GET['c'];//获取要运行的controller$c_name=$c_str.'Controller';//按照约定url中获取的controller名字不包含Controller,此处补齐。
MVC架构模式实例⼀、简介 什么是MVC呢?MVC架构模式,也就是Model View Controller模式。
它是⼀种软件设计典范,⽤⼀种业务逻辑、数据、界⾯显⽰分离的⽅法组织代码,将业务逻辑聚集到⼀个部件⾥⾯,在改进和个性化定制界⾯及⽤户交互的同时,不需要重新编写业务逻辑。
MVC被独特的发展起来⽤于映射传统的输⼊、处理和输出功能在⼀个逻辑的图形化⽤户界⾯的结构中。
说起来好像是很复杂,但是我对它的理解也就是各⾃处理⾃⼰的任务。
模型:负责封装并实现应⽤的具体功能。
可以实现系统中的业务逻辑,通常可以⽤JavaBean来实现。
视图:⽤于与⽤户的交互。
⽤来将模型的内容展现给⽤户。
⽤户可以通过视图来请求模型进⾏更新。
视图从模型获得要展⽰的数据,然后⽤⾃⼰的⽅式展⽰给⽤户,相当于提供页⾯来与⽤户进⾏⼈机交互。
⽐如⽤户在登陆注册界⾯完成信息的填报后点击确定,由此来向控制器发出这个请求。
控制器:是Model与View之间沟通的桥梁。
⽤来控制应⽤程序的流程和处理视图所发出的请求。
当控制器接收到⽤户的请求后,会将⽤户的数据和模型相映射,也就是调⽤模型来实现⽤户请求的功能。
然后控制器会选择⽤于响应的视图,把模型更新后的数据展⽰给⽤户。
MVC模式的这三个部分的职责⾮常明确,⽽且相互分离,因此每个部分都可以独⽴地改变⽽不影响其他部分,从⽽⼤⼤提⾼应⽤的灵活性和重⽤性。
⼆、⽬的 使⽤MVC的⽬的是将Model和View实现代码分离,也就是前台html表现层和后台php逻辑层分离。
这样做便于开发,代码优化,界⾯交互性好。
归根结底,其⽬的就是便宜项⽬开发。
三、特点 MVC重要特点就是两种分离:1.视图和数据模型的分离:使⽤不同的视图对相同的数据进⾏展⽰;分离可视和不可视的组件,能够对模型进⾏独⽴测试。
因为分离了可视组件减少了外部依赖利于测试。
(数据库也是⼀种外部组件)2.视图和表现逻辑(Controller)的分离:Controller是⼀个表现逻辑的组件,并⾮⼀个业务逻辑组件。
基于MVC模式的PHP框架设计【摘要】对于任何语言,框架的发展都是为了降低程序之间的依赖性和耦合性,使重用性达到最高。
本文参照框架、PHP、MVC模型的优缺点,设计一个部署和应用简单、且效率高,具有良好的扩展性和可维护性、占用服务器资源低的PHP框架。
【关键词】框架;MVC模式;PHP本文设计的PHP框架(下文统称为IdeaPHP),是一个采用面向对象的设计思想,基于MVC模式开发的轻量级PHP框架,具有单一入口、类自动加载、强大基础类、扩展类等功能。
该框架继承PHP的优点,部署和应用极为简单、且效率高,具有良好的扩展性和可维护性、占用服务器资源低等特点,能使WEB 开发变得更简单、更快捷,可以稳定的用于个人或中小型企业系统的开发。
1 框架特点1)基于MVC的开发模式,三个部件相互独立,改变其中一个不会影响其它两个,低耦合性;同时,具有很好的维护性、重用性和适用性。
2)本框架采用模块和操作的方式设计,代码采用面向对象思想,框架源码简单易用,独立灵活,便于维护和调试,或二次开发。
3)该框架提供了数据库访问层、功能扩展接口(支持自定义扩展类库和扩展函数),直接使用即可完成一些常见的功能,操作灵活,简单易用。
4)使用Memcached对SQL和session进行缓存,使用Smarty缓存技术进行页面静态化,提升效率,减少运行消耗。
2 框架主要功能2.1 单一入口单一入口即一个文件处理所有的HTTP请求,即访问网站任何功能,都是从浏览器访问index.php文件,这个文件就是这个应用程序的单一入口。
在一般的web过程化编程时,每个PHP文件都能独立访问并运行,这犹如一场演唱会,需要在每个入口都要检票和安全检查。
而采用单一入口进行项目部署和访问时,一个项目只有一个(但不一定是唯一)入口,就像演唱会如果只能从一个入口入场(程序是抽象的,一个和多个入口效率一样),则可以灵活控制现场秩序和安全。
这在一些常见框架如zend,thinkphp,qeephp等,都采用了统一的入口,这样的设计模式在权限控制,url重写,结合MVC清晰的目录结构等都有很大优势。
M:JavaBean--模型 V:JSP--显示页面 C:Servlet--控制台访问M客户端(IE 等)Servlet获得客户端数据并把数据封装到域对象中CService:服务处理业务逻辑Dao:数据访问Data Access Object 数据库JavaBean:封装数据JSPV数据显示层:最顶层(第三步)业务逻辑层(第二步)数据访问层:最底层(第一步)DAO接口Service接口cn.itcast.domain:JavaBeancn.itcast.dao:DAO接口Cn.itcast.dao.impl:DAO实现cn.itcast.service:业务接口cn.itcast.service.impl:业务实现cn.itcast.web.controller:ServletWEB-INF/pages:JSP(用户无法访问,但内部可以展现给客户端)cn.itcast.util:工具类cn.itcast.exception:自定义的异常访问1调用专门用来服务的方法3取出数据45存放改变的数据546调用6取出数据7存放数据8取出数据1封装数据2封装数据2传递数据3请求7取出结果8请求转发9显示数据101、无经验就先按逆顺序开发:数据显示层——业务逻辑层——数据访问层2、为降低耦合性(为了抽掉某个部分,整个结构所受的影响不大),采取抽象编程——接口3、Structs2才真正的实现了MVC三层架构4、建模(建立JavaBean)没有建好相当于全挂,搞定了JavaBean,数据库也就搞定了。
关于php MVC●什么是MVC?简单的说就是将网站源码分类、分层。
MVC三个字母的含义:M:Model 模型,负责数据库操作。
V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果。
C:Controller 控制器,程序的入口,决定该调用哪个V iew,并告诉View 该做什么。
如此说来,程序的执行顺序是C-V-M 或C-M ,和MVC的名字正好相反。
●为什么要MVC?1.能使网站程序物理结构更合理。
当用PHP建设一个网站的时候,最笨的方法,你可能把每个页面建成一个PHP文件。
如果你的网站只有index.php,menu.php.article.php 三个页面,那你可以不用MVC,但我们做一般的网站的时候,动辄几十个页面,把所有页面放在根目录显然不是我们所能接受的,于是你需要一个合理的思想去将你的代码分类,按功能把他们分成不同的目录,且由程序智能的载入调用,这就是MVC要帮助你做的。
2.使代码更容易维护。
我们再来看单个页面,最笨的方法,就是PHP代码与HTML代码混合,这显然不够好,你在维护网站的时候不得不区分哪里是PHP,哪里是HTML,这对于一个程序员来说,简直只灾难。
于是很多人就使用Smarty,这样就可以将“数据处理”与“页面展示”分开来,这样做的确不错,也有很多人正在这么做,但这还不是MVC,MVC要做的就是将“数据处理”再分为“逻辑处理”与“数据库操作”,这就是所说的分层。
这样当你的程序错误或想要修改的时候,就变得很轻松了,当页面显示错误的时候,你就去检查V 或模板文件;当逻辑有问题的时候,你就去检查C和V;当你数据库操作错误就去检查M。
其实MVC一般要把PHP的一个页面分割为4个页面,分别是C,V,M,模板。
各司其职,方便管理。
3.有利于代码复用。
MVC会把一般会把一个大的功能放在一个目录下,也就是由一个C去管理。
例如要做一个含有会员系统的网站,我们就可以把会员相关的代码都放到user目录里,由User_Controller 统一管理,当我们另一个网站也需要会员系统的时候,我们就可以直接把这个目录复制过去,修改一下接口就可以了。
PHP下的MVC实用框架MVC框架结合Smarty模板制作的实用例子。
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。
使用MVC应用程序被分成三个核心部件:模型、视图、控制器。
它们各自处理自己的任务。
视图V视图是用户看到并与之交互的界面。
我们使用Smarty模板驱动。
模型M模型表示企业数据和业务规则。
在MVC的三个部件中,模型拥有最多的处理任务。
控制器C控制器接受用户的输入并调用模型和视图去完成用户的需求。
实用MVC最大的好处是逻辑层、数据和表现层分离,这样方便团队配合,在大型工程时可以极大的节约时间成本。
MVC框架的大体文件夹设计,重点在于主入口文件的设计,大家请看:Index.php<?phpinclude'include/common.php';//获得http://127.0.0.1/37/mvc/index.php?m=user&a=reg$m=$_GET['m']?ucfirst(strtolower($_GET['m'])):'Index';//IndexAction.class.php$a=$_GET['a']?ucfirst(strtolower($_GET['a'])):'Index';function__autoload($className){if(strtolower(substr($className,-6))=='action'){include'Action/'.$className.'.class.php';//自动加载Action文件夹下同名类,}else if(strtolower(substr($className,-5))=='model'){include'Model/'.$className.'.class.php';//Model类是数据库操作类}else if(strtolower($className)=='smarty'){include'Smarty/Smarty.class.php';//Smarty模板类,通过这个加载}else{include'Org/'.$className.'.class.php';//其它用户自定义的扩展类都放在这里}$module=$m.'Action';$mod=new$module;$mod->run();?>一张好图胜过千言万语:这是我设计的MVC框架模型,大约就是这个样子的东西了。
PHP下的MVC实用框架
MVC框架结合Smarty模板制作的实用例子。
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。
使用MVC应用程序被分成三个核心部件:模型、视图、控制器。
它们各自处理自己的任务。
视图V
视图是用户看到并与之交互的界面。
我们使用Smarty模板驱动。
模型M
模型表示企业数据和业务规则。
在MVC的三个部件中,模型拥有最多的处理任务。
控制器C
控制器接受用户的输入并调用模型和视图去完成用户的需求。
实用MVC最大的好处是逻辑层、数据和表现层分离,这样方便团队配合,在大型工程时可以极大的节约时间成本。
MVC框架的大体文件夹设计,重点在于主入口文件的设计,大家请看:
Index.php
<?php
include'include/common.php';
//获得http://127.0.0.1/37/mvc/index.php?m=user&a=reg
$m=$_GET['m']?ucfirst(strtolower($_GET['m'])):'Index';
//IndexAction.class.php
$a=$_GET['a']?ucfirst(strtolower($_GET['a'])):'Index';
function__autoload($className){
if(strtolower(substr($className,-6))=='action'){
include'Action/'.$className.'.class.php';//自动加载Action文件夹下同名类,}else if(strtolower(substr($className,-5))=='model'){
include'Model/'.$className.'.class.php';//Model类是数据库操作类}else if(strtolower($className)=='smarty'){
include'Smarty/Smarty.class.php';//Smarty模板类,通过这个加载}else{
include'Org/'.$className.'.class.php';//其它用户自定义的扩展类都放在这里
}
$module=$m.'Action';
$mod=new$module;
$mod->run();
?>
一张好图胜过千言万语:
这是我设计的MVC框架模型,大约就是这个样子的东西了。
弄明白也就不怎么神秘啦。
文作者:wizarot欢迎同道交流。