thisisid 2019-06-21
index.php 是整个框架的入口文件,也就是说所有的请求都要从它这里开始。因为 index.php 源码非常简洁,那么我们直接放一张源码截图,按着截图说一下源码。
文件位置:/index.php
代码很简单,一共7行,前几行还只是定义一些变量,属于前言,就像是我的笔记之一,看不看没什么用啊。第六行进入了正题,它new了一个新的对象 $path ,根据前边 require 的路径,可以找到 paths.php 的源码:
文件位置:/application/config/paths.php
可以看出来这个类定义了系统目录的位置,因此如果有想定制目录结构的同学,这里肯定也要相应修改下。
因为我们主要是搞源码,肯定不会改动目录,因此这个文件对我们用处不大。
回到 index.php ,那么只剩下两行代码了:
$app = require rtrim($paths->systemDirectory,'/ ').'/bootstrap.php'; $app->run();
这两行代码就像开机键一样,就那么潇洒的执行下,你的整个程序就跑起来了。
第一行代码 require 了一个 bootstrap.php 文件,在这个文件里,完成了整个 CI 框架的初始化,包括自动加载等等。
$app->run() 这一行,完成了整个应用程序的运行。因为之后还要对这两行代码深入讲,这里仅仅带过。
以下是程序的执行过程:
bootstrap.php 是整个 CI 的 “BIOS 系统”,它仅仅负责初始化一些自动加载和找到 Codeigniter 核心一并初始化后返回给入口文件。
下面是 bootstrap.php 的源码截图:
第 9 行之前全部是定义一些路径常量
第 9 行 require 进来了一些常量,如果你有自己的一些常量也可以考虑加到这个文件里,那么几乎在整个 CI 执行期间应该都可以使用。
第 10 行 Common.php 这个文件定义了一些常用的函数,如 cache 、 view 、 session 等。通过这个函数可以很方便的在程序运行期间执行很多常见操作。
第 11 行是 CI 自己实现的自动加载类,大部分情况用于自动加载自己的类库,当然为了能兼容大火的 Composer 在 18-20 行, 也对 Composer 进行了处理。
第 12 行是 CI 自己的自动加载的配置,如果你自己写的类文件,想让 CI 帮你自动加载,可以把类相关信息配置到这里。
第 13 行的 services.php 是个重头戏,它是容器的一种实现,可以把你写的一些类库初始化信息配置在其中,那么需要的时候,可以像 15 行一样直接使用这个类,并在运行期间保证了这个类的单实例化。
第 15 行如上所说,真正实例化了 CI 自己的 autoload 类,并在 16 行把 application 目录下的 autoload 配置传入,并在 17 行进行了注册。
第 22 行,据 CI 注释说:始终加载 url 这个 helper , 原因是 90% 的应用代码都会用到它。话说这个 helper 函数是前边 Common.php 加载进来的。
第 23 行是核心,它 new 了 Codeigniter 这个核心类,并把 application/config/app.php 的配置传入了,在 24 行初始化了一下 ,随之返回给了 index.php
下面以一张拙劣的流程图结束本篇文章:
本节分析了一下 CI 的 BIOS 系统: bootstrap.php ,这个文件初始化了一些基本的类,找到并初始化了 CI 核心对象,同时将该对象返回给的入口文件。
下节当然要通览一下 Codeigniter.php 文件。
此文可以转载,但转载前需要发邮件到imustgxd*sina.cn进行沟通,未沟通的均视作侵权。
转载同时需注明原文链接 (https://segmentfault.com/a/11... ,并保留此段文字。