简单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. 2021.7.21考试总结[NOIP模拟22]

    终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...

  2. USB线上/串口/I2C引脚串联电阻的作用

    对引脚的保护. 第一是阻抗匹配.因为信号源的阻抗很低,跟信号线之间阻抗不匹配,串上一个电阻后,可改善匹配情况,以减少反射,避免振荡等. 第二是可以减少信号边沿的陡峭程度,从而减少高频噪声以及过冲等.因 ...

  3. JavaScript中的this对象指向理解

    在JavaScript中,this不是固定不变的,它的指向取决于上下文环境,一般的,认为this指向使用它时所在的对象.主要有以下几类指向: 在方法中,this 表示该方法所属的对象. 如果单独使用, ...

  4. Treevalue(0x01)——功能概述

    TreeValue--一个通用树状数据结构与函数计算库 Treevalue v1.0.0版本已经于2021年10月24日正式发布,欢迎下载体验:opendilab / treevalue. 这算是tr ...

  5. (继承)Program2.1

    覆盖和重写的意思是一样?结果是一样的 例如: 1 class Parent: # 定义父类 2 def myMethod(self): 3 print('调用父类方法') 4 5 6 class Ch ...

  6. CPU使用率和平均负载

    转载: https://mp.weixin.qq.com/s?__biz=MzU4NzU0MDIzOQ==&mid=2247487782&idx=3&sn=3f04bb053d ...

  7. 两个栈实现队列 牛客网 程序员面试金典 C++ Python

    两个栈实现队列 牛客网 程序员面试金典 C++ Python 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. C++ //run:5ms memeory ...

  8. Java 在PPT中创建散点图

    本文将以Java代码示例展示如何在PPT幻灯片中创建散点图表. 创建图表前 需要在Java程序中导入用于操作PPT的jar包 Free Spire.Presentation for Java.可参考如 ...

  9. Rancher 下图形界面 搭建 K8S 集群

    首先我们准备4台 2核3G 的 centos 7 温馨提示:先安装好一台 CentOS 的虚拟机,并且安装好 docker,永久关闭防火墙. 再这个基础上我们分别克隆出四台 Rancher.K8S1. ...

  10. JDK 之 Arrays.asList - 源码分析

    Arrays工具类提供了一个方法asList, 使用该方法可以将一个变长参数或者数组转换成List . 其源代码如下: @SafeVarargs public static <T> Lis ...