简单mvc框架核心笔记
简单mvc框架核心笔记
看了thinkphp5的源码,模仿写了一个简单的框架,有一些心得笔记,记录一下
1.目录结构
比较简单,没有tp那么复杂,只是把需要的核心类写了一些。
核心类库放在mykj里,

2,生命周期,执行流程
入口文件自然是public里的index
index里引入start.php,
start.php中引入base.php,并且执行主程序
base.php中执行自动加载,文件注册机制,注册错误机制等
3,主程序如果实现从url到页面输出
基本的逻辑是,从url里获取到PATH_INFO,再根据‘/’截取到具体模块,控制器和方法的值,有路由机制的时候,需要读取路由里相应的配置。
然后加载相应app中的控制器,执行相应的方法,控制器中用assign来赋值变量,fetch来输出模板。
4,各个阶段的主要程序
1.自动加载机制
主要用了spl_autoload_register,php自从有了命名空间功能,自动加载就变得简单明了。使用spl_autoload_register函数加上需要自动加载执行的方法,就实现了类的自动加载。
spl_autoload_register($autoload ?: 'mykj\\Loader::autoload', true, true);

2.寻找url里对应的模块,控制器和方法。
这里截取url比较简单,获取路由用到了正则,这里不再陈述,说一下核心生产控制器实例的方法
生产类的对象,实例化

执行方法

ReflectionClass和ReflectionMethod这两个php系列函数,一般不经常用,只有在写这种框架的时候会用到,他们都是可以传入变量执行实例化类的一系列方法。
3.模板输出功能
模板输出的简单版逻辑是,通过assign赋值变量,fetch指定相应模板,核心view类加载模板,正则替换模板中的标签,然后生成缓存php文件,最后输出。
这里有个很方便的函数extract,可以将数组中的key做变量,值做值,方便assign赋值。
// 模板阵列变量分解成为独立变量
extract($this->data, EXTR_OVERWRITE);//变量替换
以上便是简单tp5mvc框架的逻辑,tp5中每个阶段有许许多多其他的功能,向中间件、钩子等等功能,都需要更细致的学习。
简单mvc框架核心笔记的更多相关文章
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- PHP MVC框架核心类
PHP MVC框架核心类 现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/F ...
- java写个自己的mvc框架学习笔记
1. 介绍 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的 ...
- 手写一个自己的简单MVC框架myPHP
myPHP框架 采用的是MVC 思想,应用纯面向对象及项目单一入口,实现的一个自定义的框架.(自己兴趣的练习) 一.项目单一入口 入口文件 myphp\index.php前台 一个网站所有的请求都请求 ...
- 自己实现的简单MVC框架(类似Struts2+Spring)
一.框架简介 本框架是一个类似于Struts2+Spring的框架,目的在于个人钻研和技术分享,将流行技术框架Struts2.Spring中使用到的主要技术以较为简化的方式实现出来,给大家一个更直观的 ...
- spring mvc 框架核心文档
http://docs.spring.io/spring-data/ Parent Directory - cassandra/ 01-Apr-2014 01:50 - commons/ 29-Jan ...
- 自己动手写一个简单的MVC框架(第二版)
一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.W ...
- 一个简单 Go Web MVC 框架实现思路
需要的知识点 为了防止你的心里不适,需要以下知识点: Go 基本知识 Go 反射的深入理解 使用过框架 Go Web 服务器搭建 package main import ( "fmt&quo ...
- 封装简单的mvc框架
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式. MVC把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). PH ...
随机推荐
- 2021.7.21考试总结[NOIP模拟22]
终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...
- USB线上/串口/I2C引脚串联电阻的作用
对引脚的保护. 第一是阻抗匹配.因为信号源的阻抗很低,跟信号线之间阻抗不匹配,串上一个电阻后,可改善匹配情况,以减少反射,避免振荡等. 第二是可以减少信号边沿的陡峭程度,从而减少高频噪声以及过冲等.因 ...
- JavaScript中的this对象指向理解
在JavaScript中,this不是固定不变的,它的指向取决于上下文环境,一般的,认为this指向使用它时所在的对象.主要有以下几类指向: 在方法中,this 表示该方法所属的对象. 如果单独使用, ...
- Treevalue(0x01)——功能概述
TreeValue--一个通用树状数据结构与函数计算库 Treevalue v1.0.0版本已经于2021年10月24日正式发布,欢迎下载体验:opendilab / treevalue. 这算是tr ...
- (继承)Program2.1
覆盖和重写的意思是一样?结果是一样的 例如: 1 class Parent: # 定义父类 2 def myMethod(self): 3 print('调用父类方法') 4 5 6 class Ch ...
- CPU使用率和平均负载
转载: https://mp.weixin.qq.com/s?__biz=MzU4NzU0MDIzOQ==&mid=2247487782&idx=3&sn=3f04bb053d ...
- 两个栈实现队列 牛客网 程序员面试金典 C++ Python
两个栈实现队列 牛客网 程序员面试金典 C++ Python 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. C++ //run:5ms memeory ...
- Java 在PPT中创建散点图
本文将以Java代码示例展示如何在PPT幻灯片中创建散点图表. 创建图表前 需要在Java程序中导入用于操作PPT的jar包 Free Spire.Presentation for Java.可参考如 ...
- Rancher 下图形界面 搭建 K8S 集群
首先我们准备4台 2核3G 的 centos 7 温馨提示:先安装好一台 CentOS 的虚拟机,并且安装好 docker,永久关闭防火墙. 再这个基础上我们分别克隆出四台 Rancher.K8S1. ...
- JDK 之 Arrays.asList - 源码分析
Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List . 其源代码如下: @SafeVarargs public static <T> Lis ...