1.2.1 介紹
在乙個大的專案中,可能會遇到同名的類、函式、常量,為了區分這些元素,我們可以將這些元素分別存放到不同的命名空間中。
1、命名空間就是包,用來存放專案中的類、函式、常量
2、通過namespace關鍵字來宣告命名空間
1.2.2 宣告命名空間
<?php
namespace
china
;//定義命名空間
function
getinfo()
namespace
usa;
//定義命名空間
function
getinfo()
//呼叫
getinfo()
;//i am a america
\usa\getinfo()
;//i am a america
\china\getinfo()
;//我是中國人
注意:\
表示公共空間
1.2.3 多級命名空間
命名空間的名字可以是多級的(子級命名空間)。
<?php
namespace
china\beijing\shunyi
;class
student
namespace
usa\washington
;class
student
//測試:
$stu1
=new
student()
;//相對路徑
$stu2
=new
\usa\washington\student()
;//絕對路徑
$stu3
=new
\china\beijing\shunyi\student()
;//絕對路徑
var_dump
($stu1
,$stu2
,$stu3);
//object(usa\washington\student)#1 (0)
//object(usa\washington\student)#2 (0)
//object(china\beijing\shunyi\student)#3 (0)
總結:如果將相對路徑轉成絕對路徑
公共空間+命名空間+空間元素
公共空間 命名空間 空間元素
\ china\shanghai\pudong\ student
1.2.4 訪問空間元素的三種方式
1、非限定名稱訪問
2、完全限定名稱訪問
3、限定名稱訪問
<?php
namespace
china\beijing\shunyi
;function
getinfo()
namespace
china\beijing
;function
getinfo()
//訪問空間元素的三種方式
getinfo()
;//非限定名稱訪問 北京...
\china\beijing\getinfo()
;//完全限定名稱訪問 北京...
shunyi\getinfo()
;//限定名稱訪問 順義...
//轉成絕對路徑如下:
// \china\beijing\shunyi\getinfo();
練習:將下面的相對路徑轉成絕對路徑
例題一:
namespace a\b\c;
fun(); => \a\b\c\fun();
a\fun(); => \a\b\c\a\fun()
c\fun(); => \a\b\c\c\fun();
1.2.5 引入命名空間
完全限定名稱訪問元素路徑太長,可以將其他空間引入到當前空間來
通過use引入命名空間
<?php
namespace
china\beijing\shunyi
;function
getinfo()
namespace
usa;
function
getinfo()
//引入命名空間
usechina\beijing\shunyi
;//測試
getinfo()
;//lincoln
shunyi\getinfo()
;//李白
/*分析:
第二步:通過引入的空間拼接絕對路徑:\china\beijing\shunyi+shunyi\getinfo(),shunyi是公共部分,只需要取乙個,最後拼接的位址是:\china\beijing\shunyi\getinfo(),這個位址可以找到對應的元素
*/
引入命名空間的拼接規則
公共空間+引入空間+(去除公共部分,公共部分只能有一級)空間元素
比如:namespace
a\b\c
;function
getinfo()
namespace
d\e;
usea\b\c
;//引入命名空間
c\getinfo()
;//正確 \a\b\c\getinfo();
b\c\getinfo()
;//錯誤 \a\b\c\b\c\getinfo();
1.2.6 引入空間元素
引入類:use
引入函式:use function [php7.0以後支援]
引入常量:use const [php7.0以後支援]
<?php
namespace
china\beijing\shunyi
;class
student
function
getinfo()
const
type
='學生'
;namespace
usa;
//引入類
usechina\beijing\shunyi\student
;//引入函式
usefunction china\beijing\shunyi\getinfo
;//引入常量
useconst china\beijing\shunyi\type
;//測試
$stu
=new
student
;var_dump
($stu);
echo''
;getinfo()
;echo
type
;
1.2.7 給類、函式取別名
如果引入的類和函式與當前空間的類和函式名稱相同,需要給引入的類和函式取別名。
通過as取別名
<?php
namespace
china\beijing\shunyi
;class
student
function
getinfo()
namespace
usa\washington
;class
student
function
getinfo()
//引入類取別名
usechina\beijing\shunyi\student
as chinastudent;
//引入函式
usefunction china\beijing\shunyi\getinfo
as info1;
//測試
$stu
=new
chinastudent
;var_dump
($stu);
getinfo()
;//lincoln
info1()
;//李白
1.2.8 公共空間
如果乙個頁面沒有namespace宣告空間,這個頁面的元素在公共空間下
公共空間用\
表示
<?php
function
getinfo()
\getinfo()
;//李白
1.2.9 命名空間注意事項
1、命名空間只能存放類、函式、const常量
2、第乙個namespace前面不能有任何的**,空白字元、header()也不行。
3、包含檔案不影響當前的命名空間
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開始允...