有关PHP中MVC的开发经验分享


Posted in PHP onMay 17, 2012

一、入口
入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础,

<?php 
require 'command/config.php'; 
require 'command/app.php'; 
app::run($config); 
?>

首先不用说大家也看得出来,加载系统配置文件,然后通过引擎来加载系统配置。
二、引擎
public function run($config){ 
header("Content-type:text/html;charset=utf-8"); 
self::$config = $config; //加载系统配置 
self::copyright(); 
self::testsystem(); //系统环境 
self::setsystem(); //设置系统参数 
self::incinfo(); 
if(!IN_WEB){exit('网站正关闭维护中,请稍候访问!');} 
defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否调试模式 
self::setpath(); //设置系统路径 
self::getdatabase(); //测试数据库 
self::loadlib(); //加载库 
self::getRouteConfig(); //运行路由并加载控制器 
}

引擎里面首先设置配置文件,再测试系统参数,加载系统模块,取得配置在的网站信息文件,设置网站需要的路径,测试系统配置里面的数据库参数,加载库文件,最后是加载路由获取请求地址。不知道这样的流程对不对,只是我根据自己的学习自己编写的一套而已,但里面却缺少缓存,具体缓存应该怎么样的设置。
这里的数据库测试是根据配置用哪一类型的数据库,再加载对该类型数据库操作的封装文件。
三、路由
以下为上面的最后一个函数,加载控制器文件,根据配置文件获得请求方式。
public function getRouteConfig(){ 
$route_type=self::$config[route][url_type]; 
switch($route_type){ 
case 1: 
//echo $_SERVER['SCRIPT_NAME'].'<br />'; 
$query_string=$_SERVER['QUERY_STRING']; 
//echo $_SERVER['REQUEST_URI'].'<br />'; 
$urlstr=$_GET['controller']; 
break; 
case 4: 
$url = end(explode('/', $_SERVER["PHP_SELF"])); 
$urlstr = strtolower(substr($url,0,-4)); 
break; 
} 
if(file_exists(Contr_DIR.'Controller.php')){ 
require Contr_DIR.'Controller.php'; 
//echo $urlstr; 
$template = self::$config['Templates']; 
controller::load($urlstr,$template); 
}else{ 
exit('控制器文件不存在'); 
} 
}

四、控制器
控制器文件也蛮简单,只是根据路由分析出的地址来加载模型文件和视图文件,
class controller{ 
public $obj; 
public function load($url,$template){ 
$config=$template; 
if(file_exists(Model_DIR.$url.'.model.php')){ 
$views = new views; 
//echo Model_DIR.$url.'.model.php'; 
require Model_DIR.$url.'.model.php'; 
$temp = $config[$url][0]; 
if($temp!='' && $temp!=null && isset($temp)){ 
if(file_exists(Templ_DIR.$temp)){ 
//echo Templ_DIR.$temp; 
require Templ_DIR.$temp; 
}else{ 
exit('视图文件不存在!'.$temp); 
} 
}else{ 
exit('此页未设置显示模板!'.$temp); 
} 
unset($views); 
}else{ 
exit('模型文件不存在:'.$url.'.model.php'); 
} 
} 
}

但里面有个注意的是模型文件里面需要输出的数据全部都是通过views这样一个类进行输出,包里视图文件里面所有的系统参数等。不知道,这种方法是不是显示得多此一举,原来是想把所有要输出的数据进行封装。
其它的模板文件也都是用类进行了封装,具体怎么写高人应该都知道了吧,这些只是我的个人见解,但是缓存应该怎么写,现在还是一个模糊的概念,是不是在读取数据的时候,方向应该是读取缓存,然后再判断缓存是否存在,再判断是否需要建立缓存呢?具体操作方法还是不是很明白。希望能有高人指点指点。
PHP 相关文章推荐
随时给自己贴的图片加文字的php水印
Mar 16 PHP
php实现cc攻击防御和防止快速刷新页面示例
Feb 13 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
WordPress自定义时间显示格式
Mar 27 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
php基本函数汇总
Jul 09 PHP
使用PHP接受文件并获得其后缀名的方法
Aug 05 PHP
四个PHP非常实用的功能
Sep 29 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 PHP
php的array_multisort()使用方法介绍
May 16 #PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 #PHP
php array的学习笔记
May 16 #PHP
php文件操作实例代码
May 10 #PHP
PHP图片验证码制作实现分享(全)
May 10 #PHP
php array的学习笔记
May 10 #PHP
php 中的4种标记风格介绍
May 10 #PHP
You might like
Nginx实现反向代理
2017/09/20 Servers
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
一分钟理解js闭包
2016/05/04 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
实现vuex原理的示例
2020/10/21 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
汽车机修工岗位职责
2014/03/06 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
预备党员转正材料
2014/12/19 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python
详解OpenCV曝光融合
2022/04/29 Python
python获取带有返回值的多线程
2022/05/02 Python
python开发人人对战的五子棋小游戏
2022/05/02 Python