php怎么实现简单的mvc框架,php实现简单的MVC框架实例
这篇文章主要介绍了php实现简单的MVC框架,较为详细的分析了php实现MVC框架的相关实现技巧与注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了php实现简单的MVC框架。分享给大家供大家参考。具体如下:
在开始之前需要知道的知识
1.php基础知识
2.单一入口, 不知道的可以看看这里 ()
具备以上两点, 那我们就可以开始啦. 哈哈!
先来说一下程序的执行流程
首先有个入口文件, 然后初始化一些程序, 之后根据请求调用不同的类和方法
首先我们弄一个入口文件 Index.php 来看看代码
require "Init.php";
$control = new Controller();
$control->Run();
?>
代码没什么特别的, 首先先引入Init.php文件 然后实例化一个类
然后调用该类的Run()方法 这里我们把这个类叫做控制器
既然引入了Init.php文件, 那么我们继续看看Init.php文件的源码
header("Content-type:text/html;charset=utf-8");
!defined('ROOT_PATH') && define('ROOT_PATH', str_replace('\\', 'http://www.jb51.net/', dirname(__FILE__)));
require ROOT_PATH . '/Core/Config.php'; //引入配置文件
require ROOT_PATH . '/Core/Controller.class.php'; //引入控制器类文件
require ROOT_PATH . '/Core/View.class.php'; //视图类文件
require ROOT_PATH . '/Core/Model.class.php'; //模型类文件
?>
分析一下代码, 如果你懂了, 可以略过这一步, 继续往下看哦.
首先 设置字符集, 然后判断如果没有定义常量"ROOT_PATH"那么就定义它
然后就是引入一些文件, 首先是配置文件, 控制器类文件, 视图类文件, 模型类文件
同理既然引入了文件,那么我们就打开文件看看代码, 先来看Config.php文件
$C = array(
'URL_MODE' => 1, //URL模式, 1普通模式, 2 PATH_INFO模式
'DEFAULT_CONTROL' => 'welcome', //默认调用的控制器
'DEFAULT_ACTION' => 'index', //默认执行的方法
);
?>
没什么特别的就是一个数组, 有三个值, 暂时先这样, 以后有需要在来增加
那么好, 我们继续看Controll.class.php
class Controller
{
public function Run()
{
$this->Analysis(); //开始解析URL获得请求的控制器和方法
$control = $_GET['c'];
$action = $_GET['a'];
//这里构造出控制器文件的路径
$controlFile = ROOT_PATH . '/Controllers/' . $control . '.class.php';
if(!file_exists($controlFile)) //如果文件不存在提示错误, 否则引入
{
exit('控制器不存在' . $controlFile);
}
include($controlFile);
$class = ucwords($control); //将控制器名称中的每个单词首字母大写,来当作控制器的类名
if(!class_exists($class)) //判断类是否存在, 如果不存在提示错误
{
exit('为定义的控制器类' . $class);
}
$instance = new $class(); //否则创建实例
if(!method_exists($instance, $action)) //判断实例$instance中是否存在$action方法, 不存在则提示错误
{
exit('不存在的方法' . $action);
}
$instance->$action();
}
protected function Analysis()
{
global $C; //包含全局配置数组, 这个数组是在Config.ph文件中定义的
if($C['URL_MODE'] == 1) //如果URL模式为1 那么就在GET中获取控制器, 也就是说url地址是这种的?c=控制器&a=方法
{
$control = !empty($_GET['c']) ? trim($_GET['c']) : '';
$action = !empty($_GET['a']) ? trim($_GET['a']) : '';
}
else if($C['URL_MODE'] == 2) //如果为2 那么就是使用PATH_INFO模式, 也就是url地址是这样的 控制器/方法/其他参数
{
if(isset($_SERVER['PATH_INFO']))
{
//$_SERVER['PATH_INFO']URL地址中文件名后的路径信息, 不好理解, 来看看例子
//比如你现在的URL是 那么你的$_SERVER['PATH_INFO']就是空的
//但是如果URL是
//现在的$_SERVER['PATH_INFO']的值将会是 index.php文件名称后的内容 /abc/123/
$path = trim($_SERVER['PATH_INFO'], 'http://www.jb51.net/');
$paths = explode('http://www.jb51.net/', $path);
$control = array_shift($paths);
$action = array_shift($paths);
}
}
//这里判断控制器的值是否为空, 如果是空的使用默认的
$_GET['c'] = $control = !empty($control) ? $control : $C['DEFAULT_CONTROL'];
//和上面一样
$_GET['a'] = $action = !empty($action) ? $action : $C['DEFAULT_ACTION'];
}
}
?>
注释写的很清楚, 这里我就不多说了, 做到这, 你就可以建立一个Controller目录, 然后在目录中建立welcome.class.php文件
写入如下内容
class Welcome
{
public function index()
{
echo 'Hello';
}
}
?>
允许程序你将会看到Hello
然后在写一个方法
class Welcome
{
public function index()
{
echo 'Hello';
}
public function show()
{
echo '方法名称Show';
}
}
?>
希望本文所述对大家的php程序设计有所帮助。
,
php怎么实现简单的mvc框架,php实现简单的MVC框架实例相关推荐
- php实现简单的框架,PHP 实现简单的 MVC 框架
前言: 在 PHP 的世界中,有着众多的框架,它们各有所长,各具特色.既有 Zend,Symfony,Laravel 等大型框架,也有 CodeIgniter,Slim Framework 等轻量级的 ...
- Android 开发的两种框架 MVC和MVP 的简单分析
在常见的android开发框架,有MVC和MVP两种,下面我来分别简单介绍一下. 一.MVC框架 MVC,即model(模型),view(视图),controler(控制器)三个单词的简称. 其中Mo ...
- Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 前方: 开源地址:GitHub - cyq1162/Taurus.MVC: Taurus.mvc i ...
- idea ssm框架 mysql_idea搭建简单ssm框架的最详细教程(新)
为开发一个测试程序,特搭建一个简单的ssm框架,因为网上看到很多都是比较老旧的教程,很多包都不能用了,eclipes搭建并且其中还附带了很多的其他东西,所以特此记录一下mac中idea搭建过程. 另: ...
- ssm框架requestmapping找不到_框架学习,就是介么简单
框架学习 程序员凯小白 最近实训ssm框架,SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大 ...
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...
- java mvc建包结构_Java SSM框架的配置方法、MVC结构的分析、响应的流程
今天头一次配置成功一个SSM框架,兴奋之余,还应该从使用的角度,将整个ssm配置的方法,配置的原因,认真的分析一下.在结束了对SSM框架简单的分析之后,就要开始回归基础,全面的认真复习.所以这个文档, ...
- 使用实体框架核心创建简单的审计跟踪
目录 介绍 背景 审核日志数据 审核表实体 审核类型 审计Db上下文 审核表配置 数据更改到审核表 实体更改为审核表实体 所有实体更改为审计表 在现有的DbContext中使用审核跟踪 创建DbCon ...
- php 对mvc的认识,【PHP】MVC框架为何这么难! 4年后终于明白了,被ThinkPHP害得!...
[PHP]MVC框架为什么这么难!!! 4年后终于明白了,被ThinkPHP害得!! 本帖最后由 default7 于 2014-05-15 18:39:05 编辑 这个帖子送给那些被ThinkPHP ...
- 学校作业——配置ssm框架做一个简单的登陆注册
补一下blog 1.配置maven 指向阿里的镜像并且导入ssm框架所需的依赖 <mirror><id>nexus-aliyun</id><mirrorOf& ...
最新文章
- php改变图片大小png背景变黑,php – 当将透明背景的PNG图像调整大小/转换为JPEG时,如何用白色替换黑色背景...
- Centos6 安装RabbitMq3.7.7
- jQuery-DOM
- 视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
- Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法
- java 多线程合并结果集_多线程计算数据,然后合并数据
- python colorbar位置大小调整_python - matplotlib相邻子图:添加colorbar更改子图的大小 - 堆栈内存溢出...
- 剑指offer(C++)-JZ25:合并两个排序的链表(数据结构-链表)
- 使用pyinstaller讲python文件打包成exe文件运行时,弹出命令行界面
- 我奋斗了18年还是不能和你坐在一起喝咖啡
- 【EXLIBRIS】随笔记 009
- MySQL 报错1449:The user specified as a definer (’mysql.infoschema‘@’localhost‘) does not exist
- 一小球从100米高度落下,每次落地后反弹原来高度的一半,问第十次落地经过的路径多长?第十次落地后反弹多高?
- 先图科技的AGI模盒发布了!
- CSAPP Final Exam Preparation: reading solution records (2b continued)
- 第十七届“科大讯飞杯”题解
- Intellij Idea在引入Eclipse工程的时候,报unmapped spring configuration的解决办法
- PTA 悄悄关注 (25 分)
- 合肥十中高考2021成绩查询,2019合肥十中录取分数线及2019高考成绩喜报
- 中航创世智慧康复,助力康复医疗技术跨越发展
热门文章
- C++ Primer 第11章 泛型算法 学习总结
- netcore docker_让.NetCore程序跑在任何有docker的地方
- win启动linux iso文件位置,安装Linux之后如何进入win系统?
- mac node oracle,将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)
- linux中的集线器、交换机、路由器及组网
- python教程输入_python怎么输入一个集合
- 亚马逊出的平板电脑_亚马逊推出了这款不到400元的平板电脑!学生党的福音!...
- 吴恩达:机器学习应以数据为中心
- 征稿 | Call for papers on Knowledge Graphs
- 论文浅尝 | 中科院百度微软等学者最新综述论文40+最新方法阐述知识图谱提升推荐系统准确性与可解释性...