MVC编程思想
什么是MVC?
简单的说就是将⽹站源码分类、分层。
MVC三个字母的含义:
M:Model 模型,负责数据库操作。
V:View 视图,负责调⽤Model调取数据,再调⽤模板,展⽰出最终效果。
C:Controller 控制器,程序的⼊⼝,决定改调⽤哪个View,并告诉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的思路
我们需要三个基类:Controller、View、Model ,然后不同的C、V、M分别继承他们就有对应的属性与⽅法了,如果这⾥你不理解,可以去看看⾯向对象的书。
我给⼤家提供⼀种MVC基类的设计思路,仅供参考:
1、Controller类的设计
⼀个main()⽅法,供程序调⽤,主要是通过get和post变量决定该如何处理。
⼀个getModel($model)⽅法,在需要调⽤数据库的时候,调⽤对应⽬录的M。
⼀个display($view)⽅法,在main()⽅法中调⽤,载⼊对应的V,并掉应V的main()⽅法。
2、View类的设计与Controller很相似
⼀个main()⽅法,当C载⼊V的时候调⽤这个⽅法,使程序能继续执⾏下去。
⼀个getModel($model)⽅法,在需要调⽤数据库的时候,调⽤对应⽬录的M。
⼀个display($template),调⽤对应的模板⽂件,并把数据传递给模板。
3、Model类的设计
可以定义⼀些属性,例如要操作那些表,操作那些字段等。
⼀个getDB()⽅法,获得⼀个数据库类的实例(数据库类⼀般都是⽤单件模式设计的)。
⼀个load()⽅法,载⼊⼀个数据。
⼀个add()⽅法,可以根据定义好的属性⾃动构造SQL语句,并执⾏插⼊操作。
⼀个eidt()⽅法,同上,但执⾏修改操作。
⼀个del()⽅法,同上,但执⾏删除操作。php文件管理系统mvc 源码
为了能使新⼿更好的理解我这个思路的⼯作原理,我们现在模拟⼀个⽤户登录的场景,看看MVC是如何⼯作的。现在假设,所有的数据都提交给index.php。
第⼀步:
我们提交各get变量,告诉index.php该⽤哪个C,例如可以这样index.php?controller=user
然后index接收到get变量,什么也不需要做,直接到/user/controller.php,把所有数据丢给他,本来GET和POST就是全局的,所以index.php也不需要做什么,直接调⽤C的main函数就可以了,到此index.php的任务完成。
第⼆步:
C的main函数开始执⾏,检查变量,发现⽤户要执⾏的登录操作(很简单,你post个变量do=login就可以
了),于是调⽤ getModel,载⼊对应的M类(例如/user/models/model.php),并实例化,
调⽤实例的load⽅法,载⼊该⽤户的数据资料,判断是否与⽤户提交的密码⼀致,如果提交的数据不正确header跳转到出错页⾯,如果正确,调⽤
display()⽅法,载⼊对应的V(例如/user/views/details.php),并实例化,调⽤其main()函数,进⼊第三步。到此C
的任务已完成,第⼆不操作均在main函数中进⾏。
第三步:
你可以选择调⽤getModel()载⼊M,重写调取数据,也可以在C实例化V的时候,把参数传过来(例如SESSION),当V已经确定得到数据以后,display(),载⼊模板,MVC执⾏完毕。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论