命名空間是php為了解決重名問題推出的機制,密碼空間可以認為地將記憶體進行分隔,讓不同記憶體區域的同名結構得以共存,類似作業系統中資料夾的概念
基礎語法:namespace space_name;
乙個檔案中可以宣告多個命名空間,但實際開發往往只會定義乙個,第一次宣告的命名空間必須在所有**之前
類似子資料夾的概念,可以在乙個命名空間下面建立乙個子空間:namespace space\son_space1;
所有定義的命名空間的頂級空間,所有未定義命名空間的指令碼都位於全域性空間中
所有空間本質上都是在全域性空間中劃分出來的
所有系統常量、系統函式、系統類都屬於全域性空間下的
在命名空間中,使用非限定名稱方式訪問空間成員時,首先會在當前空間內查詢,如果找不到,會去全域性空間查詢該成員是否是系統常量或系統函式,不會查詢系統類。
4.1、非限定名稱訪問:直接訪問當前空間內成員
4.2、限定名稱訪問:用於訪問當前空間子空間的成員,在元素前使用空間名字+\來訪問
4.3、完全限定名稱訪問:從全域性空間(相當於根目錄,用\表示)開始寫路徑,相當於絕對路徑
後兩種訪問方式只能訪問空間中的常量,函式和類
<?php//第乙個宣告的命名空間之前不能有其他**
namespace p2;
function
a()namespace p1\s1;
classa}
namespace p2\s2;
const a = 's2';
namespace p1;
function
a()//
非限定名稱訪問
a(); //
p1//限定名稱訪問
new s1\a(); //
s1//完全限定名稱訪問
echo \p2\s2\a; //
s2//非限定名稱訪問系統常量
echo
__file__.'
';//
非限定名稱訪問系統函式
echo
time().'
';//
非限定名稱訪問系統類
//new mysqli(); //報錯
new \mysqli(); //
必須使用完全限定名稱訪問
5、命名空間引入
為了減少複雜的完全限定名稱訪問,可以將其他空間的成員(類、函式、常量)引入到當前空間,從而直接使用非限定名稱訪問
引入方式,使用use關鍵字:
namespace s1;class
man{}
function
f(){}
const
pi = 3.14;
namespace s2;
//引入類
//use s1\man;
newman();
//引入函式
//use function s1\f;
f();
//引入常量
//use const s1\pi;
echopi;
//一次性引入
// use s1\;
注意:使用use進行空間引入時,預設從全域性空間開始構建路徑,即不以\符號開頭的路徑會在路徑開頭自動加上\符號,以上** use s1\man;等價於use \s1\man;
重名問題:
如果存在重名,則在use語句後面加上as 別名:use s1\man as alias;
namespace s1;class
man{}
const
pi = 3.14;
namespace s2;
class
man{}
const
pi = 3.14159;
uses1\;
new m();
引入空間: use spacename; 引入的空間可看作當前空間的子空間
namespace s1;class
man{}
function
f(){}
const
pi = 3.14;
namespace s2;
uses1;
news1\man();
s1\f();
echo s1\pi;
php 命名空間,PHP使用命名空間
介紹 命名空間中的類,函式或常量可以通過以下方式使用 在當前命名空間中使用類 指定相對於當前命名空間的命名空間 提供命名空間的全限定名稱 從當前命名空間 在此示例中,從test1.php載入了命名空間。沒有命名空間引用的函式或類名稱將訪問當前命名空間中的功能或類名稱 示例 test1.php nam...
php命名空間
namespace misszhou function var dump a 1 var dump var dump 1 表示呼叫全域性 解決常量的衝突問題 有點像子目錄的概念 namespace meizi 必須放第一行 include func.inc.php function one func...
php 命名空間
使用命名空間 別名 匯入,允許通過別名引用或匯入外部的完全限定名稱,是命名空間的乙個重要特徵。這有點類似於在類 unix 檔案系統中可以建立對其它的檔案或目錄的符號連線。所有支援命名空間的php版本支援三種別名或匯入方式 為類名稱使用別名 為介面使用別名或為命名空間名稱使用別名。php 5.6開始允...