有关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 函数语法介绍一
Jun 14 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
smarty获得当前url的方法分享
Feb 14 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
PHP中余数、取余的妙用
Jun 29 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP安装BCMath扩展的方法
Feb 13 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
php实现快速排序法函数代码
2012/08/27 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php计算函数执行时间的方法
2015/03/20 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Python字符串内置函数功能与用法总结
2019/04/16 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
学生党员检讨书范文
2014/12/27 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Redis入门教程详解
2021/08/30 Redis
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
element tree树形组件回显数据问题解决
2022/08/14 Javascript