W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
每個(gè)應(yīng)用都在不同的位置包含有大量的類文件??蚣芴峁┝藢?shí)現(xiàn)核心功能的類,而你的應(yīng)用將會(huì)由大量的庫,模型,以及其他實(shí)體文件以運(yùn)行。 你也可能需要第三方的類庫以供項(xiàng)目使用。記錄每個(gè)單獨(dú)的文件的位置,并硬編碼一系列的 requires()
在文件中,這是一個(gè)非常頭疼且容易出錯(cuò)的事情。 這就是自動(dòng)加載器的用武之地。
CodeIgniter提供了一個(gè)非常靈活且需要極少配置的自動(dòng)加載器。它可以定位單個(gè)的非命名空間標(biāo)注的類,符合命名空間規(guī)范 PSR4 目錄加載結(jié)構(gòu)的類, 甚至可以在常規(guī)目錄下定位類文件(例如控制器,模型等)。
為了提升性能,CodeIgniter的核心組件已被添加到類映射文件中。
自動(dòng)加載器可以單獨(dú)運(yùn)行,如果你需要的話,可以和其他自動(dòng)加載器協(xié)同運(yùn)行,例如 Composer 或者是你自己的自定義加載器。 因?yàn)樗鼈兌际峭ㄟ^ spl_autoload_register 來注冊運(yùn)行的,所以可以依次運(yùn)行,互不打擾。
自動(dòng)加載器總是處于激活狀態(tài),并通過 spl_autoload_register()
在框架運(yùn)行開始時(shí)進(jìn)行注冊掛載。
初始配置是在 /application/Config/Autoload.php 文件中進(jìn)行。該文件包含兩個(gè)主要的數(shù)組,一個(gè)用于類映射圖,一個(gè)用于符合PSR-4規(guī)范的命名空間。
我們推薦通過在應(yīng)用文件里創(chuàng)建一個(gè)或多個(gè)命名空間來管理你的類。而這一點(diǎn)對于業(yè)務(wù)邏輯相關(guān)聯(lián)的類,實(shí)體類等也是最為重要的。 配置文件中的 psr4
數(shù)組允許你將命名空間和對應(yīng)的類所存在的目錄進(jìn)行映射:
$psr4 = [
'App' => APPPATH,
'CodeIgniter' => SYSTEMPATH,
];
數(shù)組的每一行的鍵就是命名空間本身,不需要反斜杠()。如果你需要在定義數(shù)組時(shí)使用雙引號(hào),確保使用反斜杠進(jìn)行轉(zhuǎn)義。 這意味著應(yīng)當(dāng)如同 My\\App
而不是 My\App
這樣。對應(yīng)的值就是這些類所存在的目錄,而這些需要包括反斜杠。
默認(rèn)來說,應(yīng)用文件夾對應(yīng)著 App
命名空間。盡管你不一定非得給應(yīng)用目錄下的控制器,庫和模型聲明命名空間,但是如果你這樣做了的話, 這些文件就會(huì)在 App
命名空間下被找到。你可以通過編輯 /application/Config/Constants.php 文件來改變這個(gè)命名空間,并且通過更改 APP_NAMESPACE
選項(xiàng)來設(shè)置新的命名空間值:
define('APP_NAMESPACE', 'App');
你需要修改所有現(xiàn)存的指向當(dāng)前命名空間的文件。
重要
配置文件的命名空間是Config
,而不是如你所想的App\Config
。這一特性使得核心系統(tǒng)文件可被準(zhǔn)確定位,甚至在應(yīng)用的命名空間被更改的情況下。
類映射圖是CodeIgniter用來榨干系統(tǒng)最后一分性能的手段,通過不使用額外的 file_exists()
調(diào)用來查詢文件系統(tǒng)來實(shí)現(xiàn)。 你可以利用類映射圖來鏈接到第三方庫,即使它們并沒有命名空間:
$classmap = [
'Markdown' => APPPATH .'third_party/markdown.php'
];
每一行的鍵就是你所需要定位的類名。值就是需要定位的路徑
如果以上的所有方法都找不到對應(yīng)的類文件,且這個(gè)類沒有對應(yīng)的命名空間,自動(dòng)加載器將會(huì)查找 /application/Libraries 和 /application/Models 目錄來嘗試定位文件。 這為從以前版本升級(jí)提供了一個(gè)簡潔的方式。
對于支持從前版本而言,沒有額外的配置選項(xiàng)。
默認(rèn)情況下CodeIgniter自動(dòng)初始化支持Composer. 默認(rèn)情況下,它將在 ROOTPATH.'vendor / autoload.php'
中查找Composer的自動(dòng)加載文件。 如果因?yàn)橐恍┰蛐枰倪@個(gè)文件的位置,你可以修改定義在 Config\Constants.php
的值
注解
如果在CodeIgniter和Composer中都定義了相同的名稱空間,則CodeIgniter的自動(dòng)加載器將首先定位文件。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: