博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeigniter 4.0-dev 版源码学习笔记之二——入口以及初始化操作
阅读量:5779 次
发布时间:2019-06-18

本文共 1671 字,大约阅读时间需要 5 分钟。

index.php

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

index.php源码截图

文件位置:/index.php

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

paths.php 源码截图

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

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

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

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

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

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

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

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

以下是程序的执行过程:

index.php流程图

bootstrap.php 文件:

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

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

bootstrap.php 文件源码截图

  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

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

bootstrap.php 流程图

总结以及下节预告

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

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

此文可以转载,但转载前需要发邮件到imustgxd*sina.cn进行沟通,未沟通的均视作侵权。

转载同时需注明原文链接 ( ,并保留此段文字。

你可能感兴趣的文章
python socket编程
查看>>
20180702搭建青岛RAC记录
查看>>
安装部署TIDB分布式数据库
查看>>
Spring Security OAuth 实现OAuth 2.0 授权
查看>>
linux文件及简单命令学习
查看>>
dubbo源码分析-架构
查看>>
新 Terraform 提供商: Oracle OCI, Brightbox, RightScale
查看>>
6套毕业设计PPT模板拯救你的毕业答辩
查看>>
IT兄弟连 JavaWeb教程 JSP与Servlet的联系
查看>>
Windows phone 8 学习笔记
查看>>
linux并发连接数:Linux下高并发socket最大连接数所受的各种限制
查看>>
洛谷——P2176 [USACO14FEB]路障Roadblock
查看>>
我的友情链接
查看>>
ORA-01113和ORA-01110
查看>>
recv() is not interrupted by a signal in multithreaded environment
查看>>
按钮点击播放音效
查看>>
实用工具
查看>>
zabbix 服务端安装
查看>>
我的友情链接
查看>>
JavaScript学习笔记(前言)
查看>>