PHP中命名空間的原理是什么?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
1. PHP中的命名空間是什么?
什么是命名空間?“從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統(tǒng)中目錄用來將相關文件分組,對于目錄中的文件來說,它就扮演了命名空間的角色。具體舉個例子,文件 foo.txt 可以同時在目錄/home/greg 和 /home/other 中存在,但在同一個目錄中不能存在兩個 foo.txt 文件。另外,在目錄 /home/greg 外訪問 foo.txt 文件時,我們必須將目錄名以及目錄分隔符放在文件名之前得到 /home/greg/foo.txt。這個原理應用到程序設計領域就是命名空間的概念?!薄臻g概述
2. PHP命名空間該如何理解?
從本質(zhì)上講,命名空間就是一個容器,這個容器內(nèi)我們可以放入類、函數(shù)和變量,他們在同一命名空間內(nèi)可以無條件相互訪問。在命名空間之外,就必須引用或者導入其他命名空間,才能調(diào)用它們包含的這些項。
命名空間跟shell中的文件目錄的概念是一樣一樣的。在當前目錄下可以直接用文件名訪問所有文件,如果需要訪問其他目錄下的文件,就需要輸入相對路徑或絕對路徑。
引用方式:
復制代碼 代碼如下:
namespace foo;
class Foo {
public function foo()
{
return \top\namespace\bar\Bar::fuck();
}
}
導入方式:
復制代碼 代碼如下:
namespace foo;
use top\namespace\bar\Bar;
class Foo {
public function foo()
{ return Bar::fuck();
}
}
導入就相當于將目的類復制一份到當前命名空間中。
3. PHP命名空間有何實際應用?
命名空間的存在是為了解決下面兩個問題:
1). 用戶編寫的代碼與PHP內(nèi)部的類/函數(shù)/常量或第三方類/函數(shù)/常量之間的名字沖突。
2). 為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創(chuàng)建一個別名(或簡短)的名稱,提高源代碼的可讀性。
4. 一些tips
1. 同一個空間下的類直接相互直接調(diào)用,屬于一家。例如 Laravel 中的 PageController 類中可以直接寫 Page::all() 這樣的代碼來調(diào)用 Page 這個model,因為他們倆都在頂級命名空間下。
2. 若一個類存在于非頂級命名空間中,那么它只能在調(diào)用同樣是當前命名空間下的其他類才不用“引用”或“導入”,它們屬于一家。任何子命名空間都是另一個命名空間,另一個容器,沒有除了容器之間關系之外的任何特殊關系。
3. Laravel 采用 classmap 方式進行自動加載(autoload),PHP雖然有了命名空間這個高級特性,但是這只是邏輯關系,require 文件還是要有的。這個類和文件的對應關系就存在 /vendor/composer/autoload_classmap.php ,每次 composer dump-autoload 都會重新編譯、生成。
看完上述內(nèi)容,你們掌握PHP中命名空間的原理是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
標題名稱:PHP中命名空間的原理是什么-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://chinadenli.net/article16/egjgg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供域名注冊、電子商務、企業(yè)網(wǎng)站制作、手機網(wǎng)站建設、營銷型網(wǎng)站建設、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容