命名空間
在php5.3.0中引入,是乙個很重要的工具,其作用是按照一種虛擬的層次結構組織php**,這種層次結構類似作業系統中檔案系統的目錄結構。現代的php元件框架**都是放在各自全域性唯一的廠商命名空間中,以免和其他廠商使用的常見類名衝突。
為什麼使用命名空間為什麼使用命名空間
命名空間很重要,因為**放在沙盒中,可以和其他開發者編寫的**一起使用。這是現代php元件生態系統的基礎
。
我們的**可能和其他開發者的**使用相同的類名、介面名、函式或常量名,如果不使用命名空間,名稱會起衝突,導致php執行出錯。而使用命名空間將**放到唯一的廠商命名空間,我們的**就可以和其他開發者使用相同的類名、介面名、函式或常量名。
宣告命名空間宣告命名空間
每個php類、介面、函式和常量都在命名空間(子命名空間)中。在 <?php 標籤後的第一行宣告,宣告語句以namespace開頭,隨後是乙個空格,然後是命名空間的名稱,最後以;結尾。
<?php
namespace
oreilly
;
匯入與別名
在命名空間出現之前,php開發者使用zend風格的類名解決命名衝突問題,這是一種類的命名方案,因zend框架而流行,這種命名方案在php類名中使用下劃線的方式表示檔案系統的目錄分隔符。這種約定有兩個作用:其一,確保類名是唯一的;其二,原生的自動載入器會把類名中的下劃線替換成檔案系統的目錄分隔符,從而確定檔案的路徑。例如,zend_cloud_documentservice_adapter_windowsazure_query
類對應的檔案是zend/cloud/documentservice/adapter/windowsazure/query.php
。可以看出,這種命名有個缺點:類名特別長。
匯入的意思是指,在每個php檔案中告訴php想使用哪個命名空間、類、介面、函式和常量,匯入後就不用使用全名了。
示例1: 使用命名空間,沒建立別名
;示例2: 使用命名空間和預設的別名
;示例3: 使用命名空間,並自定義別名
;從php 5.6開始還可以匯入函式和常量,不過要調整use關鍵字的句法,如果要匯入函式,需要使用use func
:
<?php
usefunc
namespace\functionname
functionname()
;
如果想匯入常量,可以使用use constant
:
<?php
useconstant
namespace\const_name
;echo
const_name
;
實用技巧
多重匯入多重匯入
<?php
;
但是為了可讀性,建議不要這麼寫,還是一行寫乙個use語句比較好:
;乙個檔案使用多個命名空間
php允許在乙個php檔案中定義多個命名空間,如下示例:
<?php
namespace
foonamespace
bar
全域性命名空間
如果引用的類、介面、函式和常量沒有指定命名空間,php假定引用的類、介面、函式和常量在當前的命名空間中。如果這個假定不正確,php會嘗試解析類、介面、函式或常量。如果需要在命名空間中引用其他命名空間的類、介面、函式或常量,需要使用完全限定的php類名(命名空間+類名
)。
示例:在命名空間中使用非限定的類名
<?php
namespace
;class
foo}
因此,我們要在exception類的名稱前加上\
字首,如下示例所示。這麼做的目的是告訴php別在當前命名空間中查詢exception類,要在全域性命名空間中查詢。
<?php
namespace
;class
foo}
自動載入
命名空間還為 php-fig 制定的 psr-4 自動載入標準奠定了堅實的基礎,大多數現代的 php 元件都使用了這種自動載入模式,使用依賴管理器 composer 可以自動載入專案的依賴。現在你只需要知道沒有命名空間,就沒有現代的 php 生態系統和基於元件的新型架構,由此可見命名空間的重要性。
C 命名空間 預設命名空間與匿名命名空間
2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...
spring p命名空間 c命名空間
p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...
C 命名空間,也有叫命名空間
在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免在大規模程式設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用域。std是c...