有关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 str_replace的替换漏洞
Mar 15 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
探讨php中header的用法详解
Jun 07 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
新浪微博OAuth认证和储存的主要过程详解
Mar 27 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
Yii框架表单模型和验证用法
May 20 PHP
php语言注释,单行注释和多行注释
Jan 21 PHP
PHP架构及原理知识点详解
Dec 22 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读写文件的方法(生成HTML)
2006/11/27 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
js实现圆盘记速表
2015/08/03 Javascript
实例浅析js的this
2016/12/11 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
2020/04/27 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
进一步理解Python中的函数编程
2015/04/13 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
python实现自动化上线脚本的示例
2019/07/01 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
python实现指定ip端口扫描方式
2019/12/17 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
外企求职信范文分享
2013/12/31 职场文书
银行奉献演讲稿
2014/09/16 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
实习证明格式范文
2014/10/14 职场文书
党员个人年度总结
2015/02/14 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书