摘要:中命名空間可以解決兩類問(wèn)題用戶編寫(xiě)的代碼與內(nèi)部的類函數(shù)常量或第三方類函數(shù)常量之間的名字沖突。在沒(méi)定義命名空間的情況下,所有的常量類函數(shù)等都在全局空間下。注意訪問(wèn)任意全局類函數(shù)或變量,都可以使用完全限定名稱,例如或者。
之前沒(méi)有系統(tǒng)學(xué)習(xí)過(guò)PHP語(yǔ)言,直接上手TP框架了,所以認(rèn)為namespace和use是TP框架的一部分,最近學(xué)習(xí)語(yǔ)言模塊的時(shí)候遇到了這個(gè)問(wèn)題,所以匯總了一下。
PHP中命名空間可以解決兩類問(wèn)題:用戶編寫(xiě)的代碼與PHP內(nèi)部的類、函數(shù)、常量或第三方類、函數(shù)、常量之間的名字沖突。
為很長(zhǎng)的標(biāo)識(shí)符名稱(通常是為了緩解第一類問(wèn)題而定義的)創(chuàng)建一個(gè)別名,提高代碼的可讀性。
在沒(méi)定義命名空間的情況下,所有的常量、類、函數(shù)等都在全局空間下。
命名空間通過(guò)關(guān)鍵字namespace聲明。可以在同一個(gè)文件中定義不同的命名空間代碼,全局的非命名空間代碼與命名空間中的代碼通過(guò)大括號(hào)的形式可以組合在一起
子命名空間
命名空間的引入
與目錄和文件的關(guān)系很像,PHP命名空間也允許指定層次的命名空間的名稱通過(guò)關(guān)鍵字use引入,通過(guò)as定義別名
引入命名空間三種情況:
非限定名稱,或不包含前綴的類名稱。在命名空間為a下,使用$a = new foo();代表引用的是afoo。在命名空間為全局的情況下,使用該方法則引用的是foo。
限定名稱,或包含前綴的名稱。在命名空間為a下,使用$a = new bfoo();代碼引入的是afoo。在命名為全局的情況下,使用該方法引入的是bfoo。
完全限定名稱,或包含了全局前綴操作符的名稱。在命名空間為a下,$a = new cfoo();這種情況下,總是引入為cfoor文件上述三種方式其實(shí)就是文件路徑中絕對(duì)路徑和相對(duì)路徑。
注意:訪問(wèn)任意全局類、函數(shù)或變量,都可以使用完全限定名稱,例如strlen()或者Exception。
namespace和__NAMESPACE__魔術(shù)常量namespace用于定義命名空間,__NAMESPACE__是包含當(dāng)前命名空間的字符串,在全局的情況下,它是一個(gè)空字符串""。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/29028.html
摘要:源碼分析自動(dòng)加載系統(tǒng)會(huì)調(diào)用方法注冊(cè)自動(dòng)加載,在這一步完成后,所有符合規(guī)范的類庫(kù)包括依賴加載的第三方類庫(kù)都將自動(dòng)加載。是通過(guò)加載對(duì)應(yīng)的文件進(jìn)行注冊(cè)加載的。 源碼分析 自動(dòng)加載 系統(tǒng)會(huì)調(diào)用 Loader::register()方法注冊(cè)自動(dòng)加載,在這一步完成后,所有符合規(guī)范的類庫(kù)(包括Composer依賴加載的第三方類庫(kù))都將自動(dòng)加載。 系統(tǒng)的自動(dòng)加載由下面主要部分組成: 1. 注冊(cè)系統(tǒng)的自...
摘要:變量對(duì)象屬性數(shù)組靜態(tài)變量不支持全局變量,也不允許訪問(wèn)用戶域的全局變量,但是可以訪問(wèn)的超級(jí)全局變量變量類型支持動(dòng)態(tài)和靜態(tài)類型。雖然失去了動(dòng)態(tài)型變量的靈活性,但是在編譯時(shí)靜態(tài)變量能進(jìn)行更多的優(yōu)化。 概述 Zephir的語(yǔ)法跟PHP很相似,所以這里不會(huì)把官網(wǎng)的文檔照搬過(guò)來(lái)翻譯一遍,而是會(huì)把一些Zephir相較于PHP比較特別的語(yǔ)法挑出來(lái)講一下。如果想要要完整學(xué)習(xí)Zephir的語(yǔ)法,沒(méi)有比官...
摘要:想要做到這一點(diǎn),你需要定義中間件為。如果你希望在及方法被調(diào)用時(shí)使用一致的中間件實(shí)例,只需在容器中使用容器的方法注冊(cè)中間件以上就是路由和中間件的學(xué)習(xí),最后那那其實(shí)理解得有點(diǎn)虛,有錯(cuò)記得指出修正,謝謝 前幾篇了解完從請(qǐng)求到響應(yīng)的流程后,仔細(xì)學(xué)習(xí)下路由和中間件的玩法 ----------------------------------分割線--------------------------...
摘要:提供更簡(jiǎn)單的方式來(lái)處理用戶授權(quán)動(dòng)作。類似用戶認(rèn)證,有種主要方式來(lái)實(shí)現(xiàn)用戶授權(quán)和策略,我這里主要講解下策略的使用。文檔上面有詳細(xì)的說(shuō)明,我這里只根據(jù)自己使用過(guò)程做一個(gè)簡(jiǎn)單的筆記。 Laravel 提供更簡(jiǎn)單的方式來(lái)處理用戶授權(quán)動(dòng)作。類似用戶認(rèn)證,有 2 種主要方式來(lái)實(shí)現(xiàn)用戶授權(quán):gates 和策略,我這里主要講解下策略的使用。 文檔 上面有詳細(xì)的說(shuō)明,我這里只根據(jù)自己使用過(guò)程做一個(gè)簡(jiǎn)單的...
摘要:確實(shí),要獨(dú)立一個(gè)操作層出來(lái),確實(shí)會(huì)增加大量代碼,非常繁瑣。如果你是小項(xiàng)目,未必需要使用這一模式。但如果是年以上的復(fù)雜大型項(xiàng)目,這種模式的好處就比較明顯了。如果你是純新手,建議你暫時(shí)不要往下看,先把用得比較熟練后再回來(lái)學(xué)習(xí)。 為什么要學(xué)習(xí)Repository Pattern(倉(cāng)庫(kù)模式) Repository 模式主要思想是建立一個(gè)數(shù)據(jù)操作代理層,把controller里的數(shù)據(jù)操作剝離出來(lái)...
閱讀 773·2023-04-25 19:53
閱讀 4414·2021-09-22 15:13
閱讀 2635·2019-08-30 10:56
閱讀 1384·2019-08-29 16:27
閱讀 3021·2019-08-29 14:00
閱讀 2493·2019-08-26 13:56
閱讀 622·2019-08-26 13:29
閱讀 1686·2019-08-26 11:31