0

0

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

巴扎黑

巴扎黑

发布时间:2016-12-01 11:11:41

|

1414人浏览过

|

来源于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(rubyalign=centerbgcolor=#e3e3e3border=1>

<?php 
 require_once('config.php');//Otherrequires,DBinfo,etc. 
 $APP_DB='mydb'; 
 $APP_REQUIRE_LOGIN=false;//Settotrueifscriptrequireslogin 
 $APP_TEMPLATE_FILE='foo.php';//Smartytemplate 
 $APP_TITLE='MyApplication'; 
 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()); 
 } 
 //Putyourlogichere 
 //Outputthetemplate 
 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.非管理员)? 
我该如何启用输出缓存?www.phpv.net转载请注明出处 

【新方式】 

将所有东西都扔进这个MVC框架,你会发现生活是如此简单。请对比以下代码: 

<?php 
 classmyappextendsFR_Auth_User 
 { 
publicfunction__construct() 
{ 
 parent::__construct(); 
} 
 publicfunction__default() 
 { 
//Dosomethinghere 
 } 
 publicfunctiondelete() 
 {} 
 publicfunction__destruct() 
 { 
parent::__destruct(); 
 } 
} 
?>

注意这段代码显然不是用来链接到一个数据库、判断一个用户是否已经登陆、或者输出任何其他信息。控制器掌握了所有的一切。 

如果我想验证LDAP,我可以建立FR_Auth_LDAP。控制器可以识别某些输出方法(比如$_GET['output'])并可以随时转换成PDF或者SOAP。事件处理delete,只负责删除,其他的它都不管。因为这个模块拥有一个FR_User类的实例,它可以简单地判断一个用户是否已经登陆等等。Smarty,作为模板引擎控制缓存是理所当然的,但是控制器同样可以控制一部分缓存。 

从前面讲的老方式到MVC方式对于很多人来讲可能是一个全新、陌生的概念,但是一旦你转换到了这样一个概念,那么要转回去将是件相当困难的事情。 

ECTouch移动商城系统
ECTouch移动商城系统

ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有

下载

相关文章

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP+MySQL基础入门课程
PHP+MySQL基础入门课程

共113课时 | 6.9万人学习

PHP MySQL基础编程课
PHP MySQL基础编程课

共111课时 | 8.6万人学习

PHP编程(基础知识点汇总)
PHP编程(基础知识点汇总)

共85课时 | 5.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号