命名空間的作用解決檔案中引用另乙個檔案時存在相同類名,函式名以及常量名的問題,比如test.php檔案如下
然後在test1.php中載入這個檔案
如果兩者的命名空間相同,包括兩者都沒有設定命名空間的情況下,執行test1.php會報衝突,因為兩個檔案有相同的類test,這是不被允許的,然而命名空間可以很好的解決這個問題,如果將test1.php的命名空間進行修改,如下:
現在兩個檔案的類test在不同的命名空間下,因此不會發生衝突,不過具體要例項化哪個類,且看下文分析
use的作用命名空間類名php的命名空間類名總有三種方式非限定名稱,或不包含字首的類名稱,例如 $a=new foo(); 或 foo::staticmethod(),foo 將被解析為 currentnamespace\foo
限定名稱,或包含字首的名稱,例如 $a = new subnamespace\foo(),如果當前的命名空間是 currentnamespace,則 foo 被解析為currentnamespace\subnamespace\foo
完全限定名稱,或包含了全域性字首操作符的名稱,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在這種情況下,foo 總是被解析為**中的文字名(literal name)currentnamespace\foo。
下面從官網找來一張圖,詳細的介紹了類名的引用
<?php
namespace a;
use b\d, c\e as f;
// 函式呼叫
foo(); // 首先嘗試呼叫定義在命名空間"a"中的函式foo()
// 再嘗試呼叫全域性函式 "foo"
\foo(); // 呼叫全域性空間函式 "foo"
my\foo(); // 呼叫定義在命名空間"a\my"中函式 "foo"
f(); // 首先嘗試呼叫定義在命名空間"a"中的函式 "f"
// 再嘗試呼叫全域性函式 "f"
// 類引用
new b(); // 建立命名空間 "a" 中定義的類 "b" 的乙個物件
// 如果未找到,則嘗試自動裝載類 "a\b"
new d(); // 使用匯入規則,建立命名空間 "b" 中定義的類 "d" 的乙個物件
// 如果未找到,則嘗試自動裝載類 "b\d"
new f(); // 使用匯入規則,建立命名空間 "c" 中定義的類 "e" 的乙個物件
// 如果未找到,則嘗試自動裝載類 "c\e"
new \b(); // 建立定義在全域性空間中的類 "b" 的乙個物件
// 如果未發現,則嘗試自動裝載類 "b"
new \d(); // 建立定義在全域性空間中的類 "d" 的乙個物件
// 如果未發現,則嘗試自動裝載類 "d"
new \f(); // 建立定義在全域性空間中的類 "f" 的乙個物件
// 如果未發現,則嘗試自動裝載類 "f"
// 呼叫另乙個命名空間中的靜態方法或命名空間函式
b\foo(); // 呼叫命名空間 "a\b" 中函式 "foo"
b::foo(); // 呼叫命名空間 "a" 中定義的類 "b" 的 "foo" 方法
// 如果未找到類 "a\b" ,則嘗試自動裝載類 "a\b"
d::foo(); // 使用匯入規則,呼叫命名空間 "b" 中定義的類 "d" 的 "foo" 方法
// 如果類 "b\d" 未找到,則嘗試自動裝載類 "b\d"
\b\foo(); // 呼叫命名空間 "b" 中的函式 "foo"
\b::foo(); // 呼叫全域性空間中的類 "b" 的 "foo" 方法
// 如果類 "b" 未找到,則嘗試自動裝載類 "b"
// 當前命名空間中的靜態方法或函式
a\b::foo(); // 呼叫命名空間 "a\a" 中定義的類 "b" 的 "foo" 方法
// 如果類 "a\a\b" 未找到,則嘗試自動裝載類 "a\a\b"
\a\b::foo(); // 呼叫命名空間 "a\b" 中定義的類 "b" 的 "foo" 方法
// 如果類 "a\b" 未找到,則嘗試自動裝載類 "a\b"
?>
總結命名空間應用非常廣泛,想要了解命名空間的執行原理還要去了解自動載入。這裡就不說了如有不準確的地方歡迎指正
C 命名空間,你了解多少?
在c c 中,變數 函式和類的名稱都將存在於全域性作用域中,可能會導致很多衝突。namespace關鍵字的出現就是針對這種問題的。使用命名空間的目的 對識別符號的名稱進行本地化,以避免命名衝突或名字汙染 定義命名空間需要用到namespace關鍵字,後面會跟命名空間的名字,然後接一對 中的內容就是命...
命名空間和函式基礎了解
作用域 命名空間所能夠作用的範圍 內建命名空間 程式任何階段任何位置均可使用 全域性有效 全域性命名空間 程式任何階段任何位置均可使用 全域性有效 區域性命名空間 一般情況下只在各自的區域性命名空間中有效 函式名遇到括號就會呼叫!用法1 函式名可以當做變數名賦值 def index print fr...
C 命名空間 預設命名空間與匿名命名空間
2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...