ThinkPHP5.1.x 框架原始碼分析 (二) [框架的靈魂] - 自動載入 spl_autoload_register 初識

AutumnWind發表於2019-09-03

spl_autoload_register 的簡介

  1. spl_autoload_register 函式是實現自動載入未定義類功能的的重要方法
  2. 所謂的自動載入意思就是我們的 new 一個類的時候必須先 include 或者 require 的類檔案,如果沒有 include 或者 require,則會報錯。
  3. 但是這樣就必須在檔案頭部寫上許多include 或者 require檔案,非常麻煩。
  4. 為了使得沒有 include 或者 require 類的時候也正常new一個類,所以有了自動載入的概念
  5. 也就是說 new 一個類之前不用事先包含類檔案也可以正常 new ,這樣我們的檔案頭部就不用包含許多 include(require)。這就是為什麼說 spl_autoload_register 是框架靈魂。

spl_autoload_register 的三個引數

autoload_function 引數

這是一個函式 方法 名稱,可以是 字串 或者 陣列 呼叫類方法使用。這個函式 方法 的功能就是,來把需要 new 的類檔案包含 include(require)進來,這樣 的時new 候就不會找不到檔案。其實就是封裝整個專案的 includerequire 功能。
可以理解為當我們 new 一個類,並且這個類檔案沒有被包含時候就會執行這個autoload_function方法

throw 引數

此引數設定了 autoload_function 無法成功註冊時, spl_autoload_register() 是否丟擲異常。

prepend 引數

如果是 truespl_autoload_register() 會新增函式到佇列之首,而不是佇列尾部。

栗子.1

如下:先舉個錯誤的栗子,可以看到當我們直接 new 一個未包含 class類 檔案時候會報錯

image.png

栗子.2

如下:當使用 spl_autoload_register() 後當 new 一個未包含的類時候,會去執行 spl_autoload_register() 第一個引數函式名的函式,這個函式有一個引數就是需要 new 的類名,這個函式的功能就是把這個類給包含進來(類名和檔名一致),這樣就實現了自動載入功能。

image.png

栗子.3

如下:當然我們也可以改成這樣

image.png

大家加油!
上一章: ThinkPHP5.1.x 框架原始碼分析 (一) [框架的靈魂] - 類的自動載入初始

相關文章