简单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框架核心笔记的更多相关文章

  1. 使用Java元注解和反射实现简单MVC框架

    Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...

  2. PHP MVC框架核心类

    PHP MVC框架核心类 现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/F ...

  3. java写个自己的mvc框架学习笔记

    1. 介绍 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的 ...

  4. 手写一个自己的简单MVC框架myPHP

    myPHP框架 采用的是MVC 思想,应用纯面向对象及项目单一入口,实现的一个自定义的框架.(自己兴趣的练习) 一.项目单一入口 入口文件 myphp\index.php前台 一个网站所有的请求都请求 ...

  5. 自己实现的简单MVC框架(类似Struts2+Spring)

    一.框架简介 本框架是一个类似于Struts2+Spring的框架,目的在于个人钻研和技术分享,将流行技术框架Struts2.Spring中使用到的主要技术以较为简化的方式实现出来,给大家一个更直观的 ...

  6. spring mvc 框架核心文档

    http://docs.spring.io/spring-data/ Parent Directory - cassandra/ 01-Apr-2014 01:50 - commons/ 29-Jan ...

  7. 自己动手写一个简单的MVC框架(第二版)

    一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.W ...

  8. 一个简单 Go Web MVC 框架实现思路

    需要的知识点 为了防止你的心里不适,需要以下知识点: Go 基本知识 Go 反射的深入理解 使用过框架 Go Web 服务器搭建 package main import ( "fmt&quo ...

  9. 封装简单的mvc框架

    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式. MVC把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). PH ...

随机推荐

  1. Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑

    ----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...

  2. hdu 5100 Chessboard (额,,,,,就叫它趣味数学题吧)

    题意: 用K*1的砖块去覆盖N*N的大矩形,问最多能覆盖多少块. 详细证明:(转载自matrix67) Matrix67: The Aha Moments 趣题:用 k × 1 的矩形覆盖 n × n ...

  3. 我的笔记本电脑瞬间扩大一个T的容量!

    前言 不知道有多少人在家里搭建中央存储设备的,也就是NAS.这个东西在我日常生活中,存储了大量的个人资料,家人们的照片,技术的资料,还有各种高清影视剧.搭配公网的IP,可以真正做到,任何时候任何地点的 ...

  4. IELTS6 2020.7 Translation

    原文 <三国演义>(The Romance of the ThreeKingdoms)是中国一部著名的历史小说,写于十四世纪.这部文学作品以三国时期的历史为背景,描写了从公元二世纪下半叶到 ...

  5. mongoDB 的一般使用

    理解 mongodb 也是nosql 的一种.他的数据存储类型是一种和json格式比较像的数据类型,可以看作就是json. mongodb 里的数据库都是一个单独的库.一般需要用的库都会设置自己的us ...

  6. Linux&C网络编程————“聊天室”

    从上周到现在一直在完成最后的项目,自己的聊天室,所以博客就没怎么跟了,今天晚上自己的聊天室基本实现,让学长检查了,也有好些bug,自己还算满意,主要实现的功能有: 登录注册 附近的人(服务器端全部在线 ...

  7. SQL告警,执行时间长?教你写一手好 SQL !

    博主(编码砖家)负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟.导出日志后分析,主要原因竟然是没有命中索引和没有分页处理 . 其实这是非常低级的错误, ...

  8. python与C结构体之间二进制数据转换

    python与C结构体之间数据转换 前言 在实际应用中,可能会遇到直接和C进行二进制字节流协议通信,这时要把数据解包成python数据,如果可能,最好与C定义的结构体完全对应上. python中有2种 ...

  9. python grpc 微服务

    https://realpython.com/python-microservices-grpc/ https://www.manning.com/books/developing-microserv ...

  10. find 删除日志文件

    find 命令删除日志文件 find ./my_dir -mtime +10 -type f -delete EXPLANATIONS ./my_dir your directory (replace ...