PHP 命名空間與AUTOLOAD

PHP自5.3版本就有了命名空間的特性膘怕,作為C++程序員出身召庞,命名空間的概念的含義就無(wú)須贅述了。PHP作為一種腳本語(yǔ)言忘古,不存在程序入口髓堪,所以腳本無(wú)法順序執(zhí)行,即使面向?qū)ο箝_發(fā)干旁,也缺少極佳的模塊劃分導(dǎo)入機(jī)制炮沐。

從早期的include 或require一大堆文件,到PHP5中的magic method:__autoload换薄,調(diào)用一個(gè)未定義類時(shí)會(huì)自動(dòng)調(diào)用此函數(shù)专控,從而在拋出錯(cuò)誤前做最后的補(bǔ)救【方法的實(shí)質(zhì)就是逐個(gè)文件目錄窮搜索式查找遏餐,“投降前的最后一次嘗試”】,再到現(xiàn)在取而代__autoload的spl_autoload_regisger()柏蘑,不再“漫無(wú)目的”的窮搜索,而是針對(duì)不同的用途類別咳焚,分批autoload,詳解如下:

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

autoload_function 是需要注冊(cè)的自動(dòng)裝載函數(shù)碑定,如果此項(xiàng)為空又官,則會(huì)注冊(cè) spl_autoload 函數(shù)。


考慮到PHP作為腳本語(yǔ)言無(wú)程序入口的局限性六敬,模塊導(dǎo)入機(jī)制的本質(zhì)無(wú)非完成“類文件名==》磁盤文件”的映射以加載外构。基于PSR4命名空間規(guī)范【雖然命名空間為PHP5.3語(yǔ)言自帶特性】撼班,有些框架中實(shí)現(xiàn)了根據(jù)命名空間實(shí)現(xiàn)類庫(kù)的自動(dòng)加載的機(jī)制割笙,比如ThinkPHP5眯亦,但不幸若沒有【比如CodeIgniter3】倒也可以簡(jiǎn)單如下示例做一個(gè)Loader類,或者通過(guò)第三方類庫(kù)如composer來(lái)實(shí)現(xiàn)其他類庫(kù)的自動(dòng)加載乱顾。

方案一:簡(jiǎn)化版Loader類

下面代碼截圖為個(gè)人自寫宫静,測(cè)試過(guò)的簡(jiǎn)化版Loader:


最后在入口處index.php中spl_autoload_register('Loader::autoload'); 就妥妥的加載了使用過(guò)程中的具體模塊了孤里。

方案二: Composer實(shí)現(xiàn)命名空間類的自動(dòng)加載

可參見:http://www.maoxuner.cn/2017/03/24/ci3-composer.html

two tips:1.文章中有一句話:“因其作為控制器在瀏覽器中訪問(wèn),因此不能給它設(shè)置命名空間捌袜,即不不能包含namaspace語(yǔ)句∨螅”這句話毫無(wú)緣由啊,i:namespace只是指定了邏輯上隔離的空間而已侯养,如若要同一套代碼澄干,通過(guò)index指定不同的命名空間,從而控制不同的邏輯處理也并不無(wú)可能跋⒊摺疾掰;2. 個(gè)人已嘗試,控制器中包含namespace使用正常炭懊,也無(wú)何種?提示侮腹。不曉得作者何出此言,如有大神父阻,望指明望抽。

2. ?composer.json

"autoload": {

? ? ? ? "psr-4": {

? ? ? ? ? ? ? ? "app\\":"application/"

? ? ? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斟览,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苛茂,更是在濱河造成了極大的恐慌妓羊,老刑警劉巖稍计,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躁绸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涨颜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門费韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人庭瑰,你說(shuō)我怎么就攤上這事星持。” “怎么了弹灭?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵督暂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我穷吮,道長(zhǎng)逻翁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任八回,我火速辦了婚禮缠诅,結(jié)果婚禮上管引,老公的妹妹穿的比我還像新娘褥伴。我一直安慰自己重慢,他們只是感情好擅笔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布念脯。 她就那樣靜靜地躺著绿店,像睡著了一般借嗽。 火紅的嫁衣襯著肌膚如雪恶导。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天裂垦,我揣著相機(jī)與錄音,去河邊找鬼企量。 笑死届巩,一個(gè)胖子當(dāng)著我的面吹牛恕汇,可吹牛的內(nèi)容都是我干的瘾英。 我是一名探鬼主播缺谴,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼湿蛔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阳啥!你這毒婦竟也來(lái)了斩狱?” 一聲冷哼從身側(cè)響起所踊,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乍赫,沒想到半個(gè)月后惋增,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诈皿,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡截歉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宵睦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壳嚎。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荐吉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痪欲,到底是詐尸還是另有隱情业踢,我是刑警寧澤知举,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站曙痘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茧痒。R本人自食惡果不足惜文黎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一劳闹、第九天 我趴在偏房一處隱蔽的房頂上張望本涕。 院中可真熱鬧菩颖,春花似錦晦闰、人聲如沸跪妥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)污朽。三九已至,卻和暖如春颓芭,著一層夾襖步出監(jiān)牢的瞬間亡问,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人待牵。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贰拿,于是被迫代替她去往敵國(guó)和親汗盘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子癌椿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容