ThinkPHP自动加载Loader源码分析(2)

简介: ThinkPHP自动加载Loader源码分析

1-3 注册命名空间

文件还是thinkphp\library\think\Loader.php的register方法


在这里注册了俩个命令空间,分别为think和traits。然后会进入到addNamespace这个方法中


image.png


在addNamespace方法中,添加了Psr4空间


image.png


接着来到addPsr4这个方法,会把这俩个命名空间都注册到ComposerStaticInit1e269472f484e157e90227b420ffca7a类的$prefixLengthsPsr4和$prefixDirsPsr4这俩个属性中


image.png


为了验证上面做一个断点调试,看到这些数据就应该清晰了,至于traits也是一样的注册方式。


截止到这里命名空间就注册完成了,接下来研究一下psr4命名空间是个什么东东。


image.png


1-4 Psr4是什么玩意

psr是简单的理解就是文件路径、自动加载对应类的相关规范、目前TP5.1使用的是psr4规范


此处的类是指class、接口、超类结构


一个完整的类需要一下结构\<命名空间>(\<子命名空间>)*\<类名>


以下规范来源于PHP文档


  • 完整的类名必须要有一个顶级命名空间,被称为 “vendor namespace”;


  • 完整的类名可以有一个或多个子命名空间;


  • 完整的类名必须有一个最终的类名;


  • 完整的类名中任意一部分中的下滑线都是没有特殊含义的;


  • 完整的类名可以由任意大小写字母组成;


  • 所有类名都必须是大小写敏感的。


以下是官方给的一个例子,这个psr规范能理解就尽量去理解它


image.png


1-5 加载类库映射文件

到这里,肯定会有一个疑问,这里怎么没有classmap.php这个文件。


image.png


不急不慌,先执行php think optimize:autoload把文件弄出来


image.png


最终会走到addClassMap这个方法,在这个方法中,只是把classmap.php这个文件的数据赋值给$classMap 而已,没有什么其它的用法


image.png


1-6 自动加载extend目录

extend这个目录用过TP框架的都多少用过的,在这个目录里边可以存放一下自定义的类库文件。


根据下图可以看到就是使用addAutoLoadDir这个方法进行加载的


image.png


在方法中也仅仅是把extend的路径赋值给了$fallbackDirsPsr4这个属性。


image.png


截止到这里Loader::register();这部分就结束了,接着我们深入的看一下内部实现和实践案例。


在以上阅读源码中有四个属性,简单的整理一下


image.png




相关文章
|
2月前
|
PHP
深入理解composer自动加载原理
深入理解composer自动加载原理
28 0
|
12月前
|
设计模式 存储 架构师
ThinkPHP5源码阅读-类的自动加载register与autoload的实现
PHP快速入门与实战ThinkPHP是国内最流行的一款PHP框架,是国人自主研发的框架,起源于2006年,经过了十几年的不断发展。已经成为了一款被PHP广泛认可的性能开发效率兼具的利器。阅读框架源码有助于我们更好的学习语言基础,拓展设计模式等相关能力。同时很多设计与编码的思想也能更好的指导我们日常工作,尤其是想成为资深程序员或者架构师方面的同事,这是一个必须要学习的过程。今天是ThinkPHP5源码第一讲,关于类的自动加载,看看源码底层是怎么实现的。怕迷路的同学,先给个关注吧。
|
设计模式 前端开发
Yii2.0的主要目录结构是什么?底层原理是什么?
Yii2.0的主要目录结构是什么?底层原理是什么?
118 0
Yii2.0的主要目录结构是什么?底层原理是什么?
|
PHP
ThinkPHP自动加载Loader源码分析(3)
ThinkPHP自动加载Loader源码分析
212 0
ThinkPHP自动加载Loader源码分析(3)
|
PHP
ThinkPHP自动加载Loader源码分析(4)
ThinkPHP自动加载Loader源码分析
112 0
ThinkPHP自动加载Loader源码分析(4)
|
PHP
ThinkPHP自动加载Loader源码分析(1)
ThinkPHP自动加载Loader源码分析
143 0
ThinkPHP自动加载Loader源码分析(1)
|
PHP
ThinkPHP你必须要掌握的配置加载(5)
ThinkPHP你必须要掌握的配置加载
142 0
ThinkPHP你必须要掌握的配置加载(5)
|
XML JSON 数据处理
ThinkPHP你必须要掌握的配置加载(4)
ThinkPHP你必须要掌握的配置加载
119 0
ThinkPHP你必须要掌握的配置加载(4)
|
设计模式 运维 安全
ThinkPHP你必须要掌握的配置加载(6)
ThinkPHP你必须要掌握的配置加载
189 0
ThinkPHP你必须要掌握的配置加载(6)
|
运维 关系型数据库 MySQL
ThinkPHP你必须要掌握的配置加载(2)
ThinkPHP你必须要掌握的配置加载
172 0
ThinkPHP你必须要掌握的配置加载(2)

热门文章

最新文章