什麼是命名空間以及如何定義命名空間
一般情況向,在乙個php程式源**檔案或同乙個請求中是不允許有兩個以上相同名稱的類名、常量名或者函式名的,這樣的話,程式在執行的時候就會報錯。但是,在很多實際情況下,我們是無法避免在同乙個檔案下有兩個以上相同名稱的類名、常量名或者函式名的。這種情況下就需要引入命名空間。
舉個例子:
<?php
function
getuser
()function
getuser
()
像這樣的程式在執行的時候是會報錯的。所以我們引入命名空間,如下:
<?php
namespace get1
function
getuser ()
namespace get2
function
getuser ()
如何理解命名空間的含義呢?以上面的**為例,我們把這個php檔案想象成是乙個資料夾,而裡面的兩個函式想象成是兩個檔案,但是在同乙個資料夾下是不允許有兩個相同名稱的檔案的,所以我們就必須的將他們分到兩個不同名稱的資料夾中。命名空間的道理就是這樣的。
特別注意:
命名空間只對類名、函式名、常量(const定義的)有效。
乙個檔案的最前面的namespace前面不能有任何有效的字元
如何使用命名空間?
例如,我們如何使用上面定義的get2下的getuser()呢?
1)在訪問函式(或常量、類名)的時候,不指定所在命名空間時,採用就近原則訪問(訪問當前命名空間下的)。
2)那麼,如何訪問指定命名空間下的內容呢?如下:
\get1\getuser(); // 訪問get1下的getuser()方法
多級命名空間及三種訪問方式
1)多級命名空間:
想象一下,如果乙個php專案檔案是乙個資料夾,而乙個資料夾下面也會有一級子資料夾,而在一級子資料夾下又有子資料夾(二級子資料夾),命名空間也是同樣的道理,乙個命名空間下,可能還有命名空間,這就是所謂的多級命名空間,例如thinkphp中:
namespace
這就是乙個多級命名空間。至於訪問方式同一般命與名空間中的一樣。
2)命名空間的三種訪問方式(和相對路徑與絕對路徑相似)
a. 非限定名稱訪問方式
b. 限定名稱訪問方式
c. 完全限定名稱訪問方式
<?php
function
getuser ()
namespace get2
function
getuser ()
getuser(); // 非限定名稱訪問方式
命名空間的引入機制
1)空間的引入:關鍵字use,注意:當移入空間後,必須要用限定名稱訪問方式訪問引入空間裡面的函式(或類、常量),不能使用非限定名稱方式訪問,這樣會訪問到當前命名空間下的函式(或類、常量)。
2)空間類元素的引入:關鍵字use。注意:只能引入類,然後可以使用非限定名稱訪問。
關於php命名空間的理解
理解命名空間首先要知道命名空間的作用,也就是它的出現解決了那些問題 官方給出的解決的問題是 使用者編寫的 與php內部的類 函式 常量或第三方類 函式 常量之間的名字衝突。為很長的識別符號名稱 通常是為了緩解第一類問題而定義的 建立乙個別名 或簡短 的名稱,提高源 的可讀性。可以看下這篇文章 從th...
php命名空間的理解
命名空間概述這是只是大概講一下用法,如果想詳細了解,還是閱讀官方手冊比較好。什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在作業系統中目錄用來將相關檔案分組,對於目錄中的檔案來說,它就扮演了命名空間的角色。具體舉個例子,檔案 foo.txt 可以...
對PHP命名空間的理解
最早的php是沒有命名空間的,所有php 存在同乙個命名空間之下,這樣的話就不能存在相同的類或者相同的函式。但是當我們的工程越來越大的時候,由此產生的衝突會越來越多。php5.3之後增加了對命名空間的支援,宣告命名空間名使用namespace 名稱,宣告必須在整個 之前。命名空間解決了我們多個檔案使...