有关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 相关文章推荐
轻松修复Discuz!数据库
May 03 PHP
php简单的会话类代码
Aug 08 PHP
PHP循环语句笔记(foreach,list)
Nov 29 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
php基本函数汇总
Jul 09 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 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随机生成随机个数的字母组合示例
2014/01/14 PHP
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Python实现的双色球生成功能示例
2017/12/18 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
Python的信号库Blinker用法详解
2020/12/31 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
英语生日邀请函
2014/01/23 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
化验室岗位职责
2015/02/14 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
个人年终总结范文
2015/03/09 职场文书
自我推荐信格式模板
2015/03/24 职场文书
MySQL触发器的使用
2021/05/24 MySQL
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
python获取带有返回值的多线程
2022/05/02 Python
mysql中关键词exists的用法实例详解
2022/06/10 MySQL
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android