Codeigniter 4.0-dev 版源碼學習筆記之二——入口以及初始化操做

index.php

index.php 是整個框架的入口文件,也就是說全部的請求都要從它這裏開始。由於 index.php 源碼很是簡潔,那麼咱們直接放一張源碼截圖,按着截圖說一下源碼。php

index.php源碼截圖

文件位置:/index.phpbootstrap

代碼很簡單,一共7行,前幾行還只是定義一些變量,屬於前言,就像是個人筆記之一,看不看沒什麼用啊。第六行進入了正題,它new了一個新的對象 $path ,根據前邊 require 的路徑,能夠找到 paths.php 的源碼:segmentfault

paths.php 源碼截圖

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

能夠看出來這個類定義了系統目錄的位置,所以若是有想定製目錄結構的同窗,這裏確定也要相應修改下。app

由於咱們主要是搞源碼,確定不會改動目錄,所以這個文件對咱們用處不大。框架

回到 index.php ,那麼只剩下兩行代碼了:函數

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

這兩行代碼就像開機鍵同樣,就那麼瀟灑的執行下,你的整個程序就跑起來了。ui

第一行代碼 require 了一個 bootstrap.php 文件,在這個文件裏,完成了整個 CI 框架的初始化,包括自動加載等等。url

$app->run() 這一行,完成了整個應用程序的運行。由於以後還要對這兩行代碼深刻講,這裏僅僅帶過。spa

如下是程序的執行過程:

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進行溝通,未溝通的均視做侵權。
轉載同時需註明原文連接 (https://segmentfault.com/a/11... ,並保留此段文字。

相關文章
相關標籤/搜索