Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

index.php

index.php 是整个框架的入口文件,也就是说所有的请求都要从它这里开始。因为 index.php 源码非常简洁,那么我们直接放一张源码截图,按着截图说一下源码。

Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

文件位置:/index.php

代码很简单,一共7行,前几行还只是定义一些变量,属于前言,就像是我的笔记之一,看不看没什么用啊。第六行进入了正题,它new了一个新的对象 $path ,根据前边 require 的路径,可以找到 paths.php 的源码:

Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

文件位置:/application/config/paths.php

可以看出来这个类定义了系统目录的位置,因此如果有想定制目录结构的同学,这里肯定也要相应修改下。

因为我们主要是搞源码,肯定不会改动目录,因此这个文件对我们用处不大。

回到 index.php ,那么只剩下两行代码了:

$app = require rtrim($paths->systemDirectory,'/ ').'/bootstrap.php';
$app->run();

这两行代码就像开机键一样,就那么潇洒的执行下,你的整个程序就跑起来了。

第一行代码 require 了一个 bootstrap.php 文件,在这个文件里,完成了整个 CI 框架的初始化,包括自动加载等等。

$app->run() 这一行,完成了整个应用程序的运行。因为之后还要对这两行代码深入讲,这里仅仅带过。

以下是程序的执行过程:

Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

bootstrap.php 文件:

bootstrap.php 是整个 CI 的 “BIOS 系统”,它仅仅负责初始化一些自动加载和找到 Codeigniter 核心一并初始化后返回给入口文件。

下面是 bootstrap.php 的源码截图:

Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

  1. 第 9 行之前全部是定义一些路径常量

  2. 第 9 行 require 进来了一些常量,如果你有自己的一些常量也可以考虑加到这个文件里,那么几乎在整个 CI 执行期间应该都可以使用。

  3. 第 10 行 Common.php 这个文件定义了一些常用的函数,如 cache 、 view 、 session 等。通过这个函数可以很方便的在程序运行期间执行很多常见操作。

  4. 第 11 行是 CI 自己实现的自动加载类,大部分情况用于自动加载自己的类库,当然为了能兼容大火的 Composer 在 18-20 行, 也对 Composer 进行了处理。

  5. 第 12 行是 CI 自己的自动加载的配置,如果你自己写的类文件,想让 CI 帮你自动加载,可以把类相关信息配置到这里。

  6. 第 13 行的 services.php 是个重头戏,它是容器的一种实现,可以把你写的一些类库初始化信息配置在其中,那么需要的时候,可以像 15 行一样直接使用这个类,并在运行期间保证了这个类的单实例化。

  7. 第 15 行如上所说,真正实例化了 CI 自己的 autoload 类,并在 16 行把 application 目录下的 autoload 配置传入,并在 17 行进行了注册。

  8. 第 22 行,据 CI 注释说:始终加载 url 这个 helper , 原因是 90% 的应用代码都会用到它。话说这个 helper 函数是前边 Common.php 加载进来的。

  9. 第 23 行是核心,它 new 了 Codeigniter 这个核心类,并把 application/config/app.php 的配置传入了,在 24 行初始化了一下 ,随之返回给了 index.php

下面以一张拙劣的流程图结束本篇文章:

Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作

总结以及下节预告

本节分析了一下 CI 的 BIOS 系统: bootstrap.php ,这个文件初始化了一些基本的类,找到并初始化了 CI 核心对象,同时将该对象返回给的入口文件。

下节当然要通览一下 Codeigniter.php 文件。

此文可以转载,但转载前需要发邮件到imustgxd*sina.cn进行沟通,未沟通的均视作侵权。
转载同时需注明原文链接 (https://segmentfault.com/a/11... ,并保留此段文字。

相关推荐