当前位置: 首页 > 后端技术 > PHP

thinkphp5源码分析autoloader

时间:2023-03-29 22:13:59 PHP

最近在做一个项目使用Thinkphp5。感觉很多地方不是特别清楚。在这里阅读源码做个记录;如分析有误,请批评指正自动加载机。1.为什么需要框架?自动装弹机?当然,有很多不同的解释,但在我看来,最重要的功能是实现了类的懒加载,即在创建类的时候为程序加载对应的类。2.如何使用自动类加载器加载创建的自定义类。在扩展目录中创建自定义类。注意类名和文件名必须一致。最后在使用的地方直接引用即可。如果需要使用命名空间,需要特别注意,命名空间必须以文件夹的形式存在,调用时必须以命名空间为前缀~~~~三、Thinkphp5中如何实现一个autoloader(一)介绍和在index.php中启动strat.php(2)在strat.php中执行应用前,调用base.phpbase.php会定义一些常量,然后执行注册自动加载类composer自动加载。由于项目暂时不用,我们就不分析spl_autoload_register()方法注册类加载方法了。当执行遇到未知类时,会自动调用Loader::autoload方法(注意这里的autoload方法必须是静态的)。这里的注册过程对应的是Loader::autoload中的检索类过程,所以分析下面三个注册查找过程:这其实就是为静态类Loader注册命名空间的路径。本质上对应的是key=="value的值,但是为了优化查找效率,将values分开存放,用一个group来存放所有的名字。空间Key和vlaue的对应关系如图下图中,变量名为$prefixDirsPsr4,另一组类似于字典,key是所有命名空间的首字母和对应的值,变量名为$prefixLengthsPsr4。有了上面解析注册的任务命名空间,很清楚1.注册空间的名称和地址2.将注册的源代码添加到字典成员变量中,如下:$prefixspaceprefix$pathspath$prepend预先设置的优先级较高LoadclasslibrarymappingfileHereisthestorageofkey==》自动加载extend目录3.在搜索过程的最后,添加一点PRS-0;和PRS-4只有5个PRS-0PRS-4区别PRS-0PRS-4