laravel源码分析(一)
laravle是目前很火的一款php框架,国内外的用户非常多。laravel的特点是优雅简洁,作者泰勒给laravel的定义是:A PHP Framework For Web Artisans。我们可以用laravel快速开发网络应用,这为我们节省了大量时间,可以从杂乱无章的代码中解脱出来而专注于应用本身。然而laravel的另一个特点是使用了大量的php新特性,还有众多晦涩难懂的设计模式,这对新手来说并不容易理解。这篇文章的目的旨在站在新手的角度来深入理解laravel的框架源码。
安装laravel框架后,找到它的入口文件,即“项目目录”---“public”----“index.php”。
index.php里面只有几行代码,首先是require一个类加载器,看上面的注释可以知道
这是由composer生成的类加载器。加载完autoload加载器之后,再用require_once加载了一个$app实例,这个实例就像一个黑盒子一样,我们不必知道它内部的实现逻辑,只需要传入请求,它就输出响应。我们会在后面的笔记探究$app实例的内部细节。本篇先来看看自动加载器的实现。
顺着加载路径定位到ventor文件夹下的autoload.php:
在这个文件里引入autoload_real.php文件,并且调用了类ComposerAutoloaderInit883401218dc8e863111174f5eb47a0bc的静态方法getLoader();我们的自动加载器就是由这个静态方法生成的,这个名字很长的类,是composer为我们生成的,名字很长是为了防止类名重复。我们打开autoload_real.php文件看看ComposerAutoloaderInit883401218dc8e863111174f5eb47a0bc类的内部实现。
这个类里面定义了一个私有变量$loader,和两个静态方法,一个公有方法。直接看getLoader()方法。
首先判断静态变量$loader是否为空,若不空,直接返回$loader。