laravel源码探析(一):composer自动加载

      laravle是目前很火的一款php框架,国内外的用户非常多。laravel的特点是优雅简洁,作者泰勒给laravel的定义是:A PHP Framework For Web Artisans。利用laravel快速开发网络应用,为我们节省了大量时间,可以从杂乱无章的代码中解脱出来而专注于应用本身。然而laravel的另一个特点是使用了大量的php新特性,还有众多晦涩难懂的设计模式,这对新手来说并不容易理解。这篇文章的目的旨在站在新手的角度来理解laravel的框架源码。

      安装laravel框架后,找到它的入口文件,即“项目目录”---“public”----“index.php”。 
      index.php里面只有几行代码,首先是require一个类加载器,看上面的注释可以知道

 这是由composer生成的类加载器。Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,然后在你的项目中为你安装这些类库。关于composer的更多细节见官网:https://www.phpcomposer.com/。加载完autoload加载器之后,再用require_once加载了一个$app实例,这个实例就像一个黑盒子一样,传入请求,输出响应。我们会在后面的笔记探究$app实例的内部细节。本篇先来看看自动加载器的实现。

顺着加载路径定位到ventor文件夹下的autoload.php:

在这个文件里引入autoload_real.php文件,并且调用了类ComposerAutoloaderInit883401218dc8e863111174f5eb47a0bc的静态方法getLoader();我们的自动加载器就是由这个静态方法生成的,这个名字很长的类,是composer自动为我们生成的。打开autoload_real.php文件看看ComposerAutoloaderInit883401218dc8e863111174f5eb47a0bc类的内部实现。

这个类定义了一个私有变量$loader,和两个静态方法,一个公有方法。直接看getLoader()方法,getLoader方法获取类加载器,并把类加载器保存到静态变量$loader中。

 

首先判断静态变量$loader是否为空,若不空,直接返回$loader。若不存在则实例化类Composer\Autoload\ClassLoader。实例化加载器后,再调用Composer\Autoload\ClassLoader类的方法绑定一些静态的路径信息、命名空间信息以及命名空间到目录的映射。命名空间的定义符合psr-0或psr-4标准(更多关于psr的信息见官网:https://www.php-fig.org/psr/)。完成绑定后,最后也是最重要的一步,调用Composer\Autoload\ClassLoader类的register方法注册。

这里调用了,系统函数spl_autoload_register将加载器$loader注册到自动加载队列。这样当每次实例化一个当前未定义的类时,就会调用加载器的loadClass方法为我们把需要的类文件include进来,从而实现自动加载。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值