TP5 源码分析
学习框架的思想
亮仔IT哥
理学学士,5年PHP开发工作经验,性情随和,乐于分享。上敲的了代码,下进的了厨房。喜欢书法,爱好音乐。
展开
-
TP5源码分析-门面模式
文章目录使用文档源码目录我们主要是来说说怎么使用静态方式调用动态类?怎么实现的?使用文档https://www.kancloud.cn/manual/thinkphp5_1/353959源码目录源码发现定义这个几个文件门面类:thinkphp\library\think\Facade.php代理的类:thinkphp\library\think\facade\例如:真正业务类:thinkphp\library\think例如:我们主要是来说说怎么使用静态方式调用动原创 2021-08-05 20:42:08 · 344 阅读 · 3 评论 -
TP5 源码分析-App类里面的$this解析
这个类里面有很这样的使用例如$this->hook->import(); $this->config->get(); $this->request->init();等等你知道这个对象怎么来的吗?不急,亮仔一一道来:app类会继承容器Container(这是关键)容器有个魔术方法很重要 例如当调用$this->hook时找不到会调用魔术方法 public function __get($name) { return $t.原创 2020-12-03 20:14:02 · 521 阅读 · 0 评论 -
TP5 源码分析-钩子和行为
文章目录行为的使用文档图解剖析行为的使用文档https://www.kancloud.cn/manual/thinkphp5_1/354129图解剖析在tags.php配置加载行为类 (D:\www\ThinkPHP_V5.1.39\thinkphp\library\think\App.php)进行监听(这里只以 app_init 便签举个例子)...原创 2020-12-03 19:47:40 · 212 阅读 · 0 评论 -
TP5源码分析-【路由3 - 别名路由a】
一、配置使用Route::alias('user','Index/index');http://www.test.com/user二、分析//$domain = think\route\Domain$result = $domain->check($this->request, $url, $completeMatch);到 这个类 think\route\Domain 里面是瞧瞧checkpublic function check($request, $url, $c原创 2020-07-17 12:48:34 · 359 阅读 · 0 评论 -
TP5源码分析-【路由2】
文章目录回顾分析总结回顾有了【路由1】的总体介绍,我们知道了thinkphp5包括哪些路由,接下来我们整体捋一下思路,我通过几个图,给展示出来。其实框架的特点就是绕,会让你绕晕。所以我们要搞清楚设计思路,这样就可以整体把握,然后才可以细微分析。分析路由的连环调用逻辑图 1这个图表明了路由相关类的继承关系路由的连环调用逻辑图 2这个图表明了分发相关类的继承逻辑路由的连环调用逻辑图 3上面的类调用下面的类 下面的类返回对象路由的连环调用逻辑图 4这是整个逻原创 2020-07-09 10:01:46 · 294 阅读 · 0 评论 -
TP5源码分析-【路由1】
文章目录总概图解核心内库展望总概thinkphp5 路由包括以下部分所谓路由也就是通过URL能够找到你所执行的具体方法 也叫路由分发 例如ThinkPHP5 他可以路由到模块/控制器/操作 还可以路由到操作方法 还可以路由到 类的方法 还可以路由到重定向地址 还可以路由到模板图解总流程核心内库注解:红框在dispatch目录下 主要干的就是分发蓝框主要干的就是路由检测的一系列干活展望下一节以一个路由为例了解一下整个流程...原创 2020-07-07 20:45:44 · 370 阅读 · 1 评论 -
TP5源码分析-执行应用【initialize方法-之init方法分析】
文章目录回顾分析细节展望回顾上一节分析了initialize方法里面的具体流程,对里面一些地方都做了解释,像init()、数据库配置初始化、路由初始化这些都是我们接下来分析的重点分析今天我们来分析initialize方法里的init方法上源码 看注解 有var_dump的后面我都会把打印结果贴在后面 /** * 初始化应用或模块 * @access public * @param string $module 模块名 * @return原创 2020-07-05 11:56:13 · 705 阅读 · 0 评论 -
TP5源码分析-执行应用【initialize方法分析】
文章目录回顾分析回顾上一节我们分析了 执行应用的图解,也就是Container::get(‘app’)->run() 这一部分,这一节我们要分析的是thinkphp\library\think\App.php 中的 initialize 方法分析上源码 其实源码上很多地方我都有注解 public function initialize() { if ($this->initialized) { //初始化 return;原创 2020-07-01 20:45:03 · 394 阅读 · 2 评论 -
TP5源码分析-执行应用【图解】
文章目录分析上图展望分析public\index.php【执行应用并响应】Container::get(‘app’)->run()->send();接下来我们要分析前半句执行应用部分Container::get(‘app’)->run()上图展望接下来的时间里我们来玩玩$this->initialize() ;这也是个大活, 期待吧!!!...原创 2020-06-29 20:27:21 · 436 阅读 · 0 评论 -
TP5源码分析-加载基础文件【注册类库别名】
文章目录分析用法分析注册类库别名 这里注册的别名用的时候 new 别名就可以了Loader::addClassAlias([ 'App' => facade\App::class, 'Build' => facade\Build::class, 'Cache' => facade\Cache::class, 'Config' => facade\Config::class, 'Cookie' =>原创 2020-06-29 19:44:32 · 237 阅读 · 0 评论 -
TP5源码分析-加载基础文件【Loader类入口register函数分析5】
文章目录分析总结分析上一节把register第五步分析了 这一节我们分析第一步和第二步我还是把源码附上public static function register($autoload = '') { // 【1】注册系统自动加载 spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true); $rootPath = self::getRootPath(原创 2020-06-29 19:29:35 · 166 阅读 · 0 评论 -
TP5源码分析-加载基础文件【Loader类入口register函数分析4】
文章目录1、分析2、举例3、反三1、分析上一节把registe第四步分析了 这一节我们分析第五步我还是把源码附上 public static function register($autoload = '') { //【1】 注册系统自动加载 //【2】 Composer自动加载支持 // 【3】注册命名空间定义 // 【4】加载类库映射文件 // 【5】自动加载extend目录 sel原创 2020-06-27 11:28:38 · 170 阅读 · 0 评论 -
TP5源码分析-加载基础文件【Loader类入口register函数分析3】
上一节把registe第三步分析了 这一节我们分析第四步我还是把源码附上 public static function register($autoload = '') { //【1】 注册系统自动加载 //【2】 Composer自动加载支持 // 【3】注册命名空间定义 // 【4】加载类库映射文件 if (is_file($rootPath . 'runtime' . DIRECTORY_SEPARA.原创 2020-06-27 11:14:31 · 191 阅读 · 0 评论 -
TP5源码分析-加载基础文件【Loader类入口register函数分析2】
文章目录1、主要分析跳转后最终达到什么效果2、举例说明问题3、举一反三1、主要分析跳转后最终达到什么效果上一节我大概把register分为了五步 这一节我们从简单的开始 从第三步开始我还是把源码附上public static function register($autoload = '') { // 【1】注册系统自动加载 // 【2】Composer自动加载支持 // 【3】注册命名空间定义 self::addNames原创 2020-06-27 10:31:56 · 373 阅读 · 0 评论 -
TP5源码分析-加载基础文件【Loader类入口register函数分析1】
注册自动加载机制 入口函数 里面干的活 我分为五部【1】…【5】//注册自动加载机制 入口函数 里面干的活 我分为五部 public static function register($autoload = '') { // 【1】注册系统自动加载 spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true); $rootPath = self::get.原创 2020-06-27 09:26:28 · 369 阅读 · 0 评论 -
TP5源码分析-加载基础文件【Loader主要功能图解】
把loader主要的功能提取出来,从属性和方法着手,大致可以分为这些上图说明一切接下来我们就要刨根问底,走进去看看Loader类里面到底是个什么鬼附上源码<?phpnamespace think;use think\exception\ClassNotFoundException;class Loader{ /** * 类名映射信息 * @var array */ protected static $classM..原创 2020-06-27 08:18:55 · 346 阅读 · 0 评论 -
TP5源码分析-加载基础文件
加载基础文件全在base.php这个文件之中thinkphp\base.php附上图解附上源码<?phpnamespace think;// 载入Loader类require __DIR__ . '/library/think/Loader.php';// 注册自动加载Loader::register();// 注册错误和异常处理机制Error::register();// 实现日志接口if (interface_exists('Psr\Log\Logge.原创 2020-06-27 07:23:53 · 294 阅读 · 0 评论 -
TP5源码分析-入口
文章目录一、提前交代二、入口一、提前交代本系列基于thinkphp5.1.39 LTS 版本分析,可以去官网下载。采用图片加代码的方式去分析源码,旨在自己对thinkphp5有一个全新的认识。经过前些篇章的前置知识的复习,今天终于要揭开她的神秘面纱了,表着急,我会一个星期更新一遍。本系列还是会从先使用后分析的角度出发,这样目标性才会更强烈,知道我们平时用的东西的来龙去脉。别的不多说,第一次不用整那么复杂上图即可。注:图片的内的路径都是基于根目录二、入口...原创 2020-06-23 12:19:41 · 363 阅读 · 0 评论 -
TP5源码分析前置知识-注册树模式
文章目录一、白话解释一下二、看看代码吧三、TP5中的容器四、叨叨一下一、白话解释一下所谓注册树也就是在一棵树上种上果子(对象),吃的时候直接在树上去摘,是不是很方便了二、看看代码吧class Register{ public static $obj = []; public static function set($type,$obj) { self::$obj[$type] = $obj; } public static fun原创 2020-06-20 17:42:05 · 229 阅读 · 0 评论 -
TP5源码分析前置知识-【源码分析顺序】
文章目录一、说明一、架构预览二、叨叨叨叨.....一、说明我会按照这个顺序逐个分析源码,很期待,想想都鸡冻一、架构预览入口文件应用路由模块控制器操作模型视图模板引擎驱动行为中间件助手函数二、叨叨叨叨…学习框架首先得会使用而且熟练使用,一般我们在项目中使用可能用的功能有限,一般的功能就足以应付我们的项目了,我觉的应该参照文档逐个去自己试试,有了结果我们再去探索里面的内容,这样循序渐进就能很好的掌握一种框架,从而就可以迁移到其他的框架中去。...原创 2020-06-14 21:27:27 · 178 阅读 · 0 评论 -
TP5源码分析前置知识-官网手册地址
https://www.kancloud.cn/manual/thinkphp5_1/354068原创 2020-06-14 20:47:30 · 146 阅读 · 0 评论 -
TP5源码分析前置知识-简单工厂模式
一、白话解释一下所谓工厂就是为不同客户生产不同的玩意,那么程序里面的工厂有着异曲同工之妙,例如你要new 车相关的类 ,是不是每种车要自己去new? 现在我换种做法,我们把new的过程交给工厂去干,我只要告诉你类型,你就给我new什么。二、看看最简单的工厂demo用工厂之前class Car{}class Bike{}class Bus{}$catObj = new Car();$bikeObj = new Bike();$catObj = new Bus();原创 2020-06-14 16:41:30 · 623 阅读 · 0 评论 -
TP5源码分析前置知识-单例模式
文章目录一、基本概念二、未使用单例模式的情景三、demo小作四、使用场景一、基本概念单例模式也就是说一个类在一个进程中一次实例化生成全局唯一的实例二、未使用单例模式的情景class Car{ public function __construct() { }}$c1 = new Car();var_dump($c1);echo '<br>';$c2 = new Car();var_dump($c2);打印结果:object(Car)#1 (0) { }原创 2020-06-14 16:06:06 · 362 阅读 · 0 评论 -
TP5源码分析前置知识-Countable接口
1、废话稍作唠叨需要统计对象内部某些元素个数 可以用count()函数操作对象 do you see ???2、Countable接口需要实现的方法Countable {/* Methods */abstract public count ( void ) : int}3、小作democlass CountMe implements Countable { protected $_myCount = 3; public function count()原创 2020-06-09 12:48:33 · 143 阅读 · 0 评论 -
TP5源码分析前置知识-ArrayAccess接口
1、废话稍作唠叨对象可以像数组一样使用下标操作2、ArrayAcess接口需要实现的的方法ArrayAccess {/* Methods */#检查偏移位置是否存在abstract public offsetExists ( mixed $offset ) : bool#获取一个偏移位置的值abstract public offsetGet ( mixed $offset ) : mixed#设置一个偏移位置的值abstract public offsetSet ( mixed $o原创 2020-06-09 12:31:43 · 215 阅读 · 1 评论 -
TP5源码分析前置知识-API反射机制
1、废话稍作唠叨反射类则是拆封类中的所有方法、成员变量,并包括私有方法等。就如“解刨”一样,所有的反射API类的官方文档地址:https://www.php.net/reflection/2、常用API类常用的反射类类名作用Reflection可以打印类的基本信息,(通过提供的静态export()函数)ReflectionMethod见名知意,打印类方法、得到方法的具体信息等ReflectionClass用于得到类信息,比如得到类包含的方法,类本的原创 2020-06-07 18:45:01 · 387 阅读 · 0 评论