Yii2框架源码追踪阅读(一)--从入口脚本index.php到类加载器的初始化

来源:互联网 发布:plc编程培训 编辑:程序博客网 时间:2024/06/05 19:33

        我们以yii2-basic为源码阅读剖析目标,首先,请到http://www.yiichina.com/download 下载框架源码。

        接下来就开始我们的yii2源码阅读之旅吧。

请注意:由于本人会在阅读过程中写入各种注释,有可能导致文章中的代码所在行与实际框架中所在行有出入

 请注明文章来源:http://blog.csdn.net/lambert310


       从入口脚本index.php开始:
       入口脚本为:web/index.php,这是整个yii2的启动入口:


↑index.php全部内容(请注明文章来源:http://blog.csdn.net/lambert310)



4、5行见注释即可,我们直接从第7行的类加载器开始,它引入了上一层目录下vendor/autoload.php,其源码如下:


autoload.php全部内容


第5行引入了当前目录下/composer/autoload_real.php,然后在第7行调用了getLoader()这个静态方法,我们继续跟踪:

autoload_real.php(1-31行)


 在这里看从16行的getLoader()开始,具体可以见代码注释,在第28行将$loader实例化,ClassLoader.php的具体代码稍后剖析,咱们继续往下:

autoload_real.php(32-55行),请注明文章来源:http://blog.csdn.net/lambert310


在这里,由于咱们使用的开发环境是php7.0.6,所以$useStaticLoader为True,接下来引入autoload_static.php,相当于引入了下面的这个ComposerStaticInit9f9e4e27e79990b4ee47bd62041b34f3类,然后调用了getInitializer方法并传入前面的$loader作为参数:


↑autoload_static.php(687行--697行),(请注明文章来源:http://blog.csdn.net/lambert310)


在这里使用了闭包,具体效果相当于把本类中的多个成员变量绑给了$loader我们看到这里的$prefixLengthsPsr4,其实就是一个二维数组:


↑autoload_static.php(16行--31行)


然后下一个$prefixDirsPsr4:


↑autoload_static.php(77行--101行)


然后下面的$prefixesPsr0也是大致相同的效果,和前面的区别在于这是一个三维数组,原因可能是受psr4和psr0标准不同的影响:

↑autoload_static.php(190行--206行)

最后把$classMap也绑到loader上,$classMap保存了类到文件的直接映射:

↑autoload_static.php(228行--239行)


然后返回,这样就把这些属性配置绑定到了$loader上。

现在让我们回到autoload_real.php,从56行开始:

autoload_real.php(56行--79行)


让我们看到第57行,这里调用了$loader自身的register方法并传入了一个参数为true:

↑ClassLoader.php(279行--282行)

       然后我们回到autoload_real.php,往下看到59行,这里由于$useStaticLoader为True,所以把                      

     autoload_static.php中ComposerStaticInit9f9e4e27e79990b4ee47bd62041b34f3这个类中的$file数组取出:

    

    ↑autoload_statis.php(7行--15行)    

   然后回到前面autoload_real.php的64行,这里把$file中的各文件都require了一遍。


    到这里,咱们的第一篇:《从入口脚本index.php到类加载器的初始化》,就剖析完毕了,

    下一次会带来应用主体初始化的剖析。

0 0
原创粉丝点击