本篇文章給大家介紹一下php如何聲明命名空間、訪問(wèn)空間元素的三種方式,引入命名空間的方法。
一、命名空間
1.1 介紹
在一個(gè)大的項(xiàng)目中,可能會(huì)遇到同名的類、函數(shù)、常量,為了區(qū)分這些元素,我們可以將這些元素分別存放到不同的命名空間中。 1、命名空間就是包,用來(lái)存放項(xiàng)目中的類、函數(shù)、常量 2、通過(guò)namespace關(guān)鍵字來(lái)聲明命名空間
1.2 聲明命名空間
例:
<?php namespace China; // 定義命名空間 function getInfo () { echo '我是中國(guó)人'; } getInfo(); namespace USA; // 定義命名空間 function getInfo () { echo '我是美國(guó)人'; } getInfo(); ?>
效果:
利用命名空間
可進(jìn)入某個(gè)命名空間中調(diào)用方法。 例:
<?php namespace China; // 定義命名空間 function getInfo () { echo '我是中國(guó)人'; } getInfo(); namespace USA; // 定義命名空間 function getInfo () { echo '我是美國(guó)人'; } getInfo(); China getInfo(); ?>
效果:
1.3 多級(jí)命名空間
命名空間的名字可以是多級(jí)的(子級(jí)命名空間) 例如:
<?php namespace ChinaBeijingShunyi; // 定義命名空間 function getInfo () { echo 'ChinaBeijingShunyi'; } getInfo(); // 非限定名稱訪問(wèn) namespace USAWashington; // 定義命名空間 function getInfo () { echo 'USAWashington'; } USAWashington getInfo(); // 完全限定名稱訪問(wèn) ?>
效果:
1.4 訪問(wèn)空間元素的三種方式
1、非限定名稱訪問(wèn) 2、完全限定名稱訪問(wèn) 3、限定名稱訪問(wèn) 例:
<?php namespace ChinaBeijingShunyi; // 定義命名空間 function getInfo () { echo 'ChinaBeijingShunyi'; } namespace ChinaBeijing; // 定義命名空間 function getInfo () { echo 'ChinaBeijing'; } getInfo(); // 非限定名稱訪問(wèn) ChinaBeijinggetInfo(); // 完全限定名稱訪問(wèn) ShunyigetInfo(); // 限定名稱訪問(wèn) ?>
效果:
二、引入命名空間
通過(guò)use
引入命名空間 完全限定名稱訪問(wèn)元素 引入命名空間的拼接規(guī)則
公共空間+引入空間+(去除公共部分,公共部分只能留一級(jí))空間元素
例:
<?php namespace ChinaBeijingShunyi; // 定義命名空間 function getInfo () { echo 'ChinaBeijingShunyi<br>'; } namespace ChinaBeijing; // 定義命名空間 function getInfo () { echo 'ChinaBeijing<br>'; } use ChinaBeijingShunyi; getInfo(); ShunyigetInfo(); ?>
效果:
2.1 引入空間元素
引入類: use 引入函數(shù):use function 引入常量: use const 例:
<?php namespace ChinaBeijingShunyi; // 定義命名空間 class Student { } function getInfo() { echo 'jdk'; } const TYPE = 'CONST'; namespace USA; // 定義命名空間 // 引入類 use ChinaBeijingShunyiStudent; $stu = new Student(); var_dump($stu); echo '<br>'; // 引入函數(shù) use function ChinaBeijingShunyigetInfo; getInfo(); echo '<br>'; // 引入常量 use const ChinaBeijingShunyiTYPE; echo TYPE; ?>
效果:
2.2 給類、函數(shù)取別名
如果引入的類和函數(shù)與當(dāng)前空間的類和函數(shù)名稱相同,需要給引入的類和函數(shù)取別名。 通過(guò)as取別名 例:
<?php namespace ChinaBeijingShunyi; // 定義命名空間 class Student { } namespace USA; // 定義命名空間 class Student { } use ChinaBeijingShunyiStudent as ChinaStudent; $stu=new Student; var_dump($stu); echo '<br>'; $stu1=new ChinaStudent; var_dump($stu1); ?>
效果:
2.3 公共空間
如果一個(gè)頁(yè)面沒(méi)有namespace聲明空間這個(gè)頁(yè)面的元素在公共空間下 公共空間用表示 例:
<?php function getInfo() { echo '李白<br>'; } getInfo(); ?>
效果:
2.4 命名空間注意事項(xiàng)
1、命名空間只能存放類、函數(shù)、const常量。 2、第一個(gè)namespace前面不能有任何的代碼,空白字符,header()也不行。 3、包含文件不影響當(dāng)前的命名空間。
推薦學(xué)習(xí):《PHP視頻教程》