有关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传输数据的代码
Nov 13 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
总结对比php中的多种序列化
Aug 28 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
PHP学习笔记之session
May 06 PHP
提高Laravel应用性能方法详解
Jun 24 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 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
晶体管来复再生式二管收音机
2021/03/02 无线电
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
laravel 获取某个查询的查询SQL语句方法
2019/10/12 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
python 正则式 概述及常用字符
2009/05/07 Python
python通过函数属性实现全局变量的方法
2015/05/16 Python
python tornado微信开发入门代码
2018/08/24 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
抄作业检讨书
2014/02/17 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
初三语文教学反思
2016/03/03 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
Nginx源码编译安装过程记录
2021/11/17 Servers