1.命名空間的使用目的
在PHP中函數(shù)、類、常量是不允許同名的。為了解決這三者的同名問(wèn)題,所以出現(xiàn)了命名空間,故而命名空間只影響類、函數(shù)、常量(const)。
2.命名空間的使用格式
a.可以命名一個(gè)空間
<?php namespace space1;//namespace關(guān)鍵字+空間名 代碼; ?>
b.也可以同時(shí)命名多個(gè)空間
<?php namespace space1;//namespace關(guān)鍵字 +空間名 代碼1; namespace space2; 代碼2; namespace space3; 代碼3; .......//代碼1,代碼2,代碼3,可相同亦可不同 ....... ?>
注意事項(xiàng):如果一個(gè)php文件中,第一個(gè)空間的定義義必須放在第1行。不過(guò)凡事都有例外,在聲明命名空間之前還有唯一合法的代碼是用于定義源文件編碼方式的 declare 語(yǔ)句。所有非 PHP 代碼包括空白符都不能出現(xiàn)在命名空間的聲明之前。例如下面的代碼會(huì)報(bào)錯(cuò)。
<html> <?php namespace space1; namespace space2; ?> </html>
3.命名空間的訪問(wèn)
命名空間的訪問(wèn)分為:非限定空間訪問(wèn),限定空間訪問(wèn),完全限定訪問(wèn)。
a.非限定空間訪問(wèn)
<?php namespace space3; function f1(){ echo "space3"; } namespace space3space2;//其中""代表space2是space3的子空間,同理space3是space2的父空間。 function f1(){ echo "space2"; } namespace space3space2space1; function f1(){ echo "space1"; } f1();//對(duì)上面空間成員進(jìn)行訪問(wèn),輸出結(jié)果為:space1 ?>
b.限定空間訪問(wèn)
<?php namespace space2space1; function f1(){ echo "space1"; } namespace space2; function f1(){ echo "space2"; } f1();//此時(shí)輸出的是 space2 space1f1();//此時(shí)輸出的是space1 ?>
c.完全限定空間訪問(wèn)
<?php namespace space3; function f1(){ echo "space3"; } namespace space2; function f1(){ echo "space2"; } namespace space1; function f1(){ echo "space1"; } f1();//對(duì)上面空間成員進(jìn)行訪問(wèn),輸出結(jié)果為:space1 space3f1();//對(duì)space3進(jìn)行訪問(wèn),輸出結(jié)果為:space3 space2f1();//對(duì)space2進(jìn)行訪問(wèn),輸出結(jié)果為:space2 ?>
4.引入空間成員
a.use 空間名空間名 【as 別名】:將指定空間引入到當(dāng)前空間。同可以使用as關(guān)鍵字為被引入的空間起個(gè)別名
b.use 空間名空間名成員類 【as 別名】:將指定的空間中的成員引入到當(dāng)前空間,引入空間成員只能引入類
5.一些小情況
一旦命名空間出現(xiàn),那么空間元素(類、常量、函數(shù))的訪問(wèn)就被限定在空間內(nèi),如果使用非限定空間訪問(wèn),系統(tǒng)會(huì)出現(xiàn)以下解析邏輯(限定名稱或完全限定名稱是直接按照路徑準(zhǔn)確查找)
-
首先在自己空間內(nèi)查找
-
其次在如果找不到元素,不同空間元素的處理方式不同
系統(tǒng)常量,系統(tǒng)函數(shù)如果找不到,會(huì)全局空間去找
系統(tǒng)類是不會(huì)自動(dòng)去全局空間去找的(報(bào)錯(cuò),提示空間找不到)
<?php namespace space3; function f1(){ echo "space3"; } //當(dāng)前所有訪問(wèn)如果使用非限定名稱都代表訪問(wèn)當(dāng)前空間內(nèi)的元素 f1();//訪問(wèn)space3下f1()函數(shù) //想要訪問(wèn)函數(shù) define('PI',3.14);//space3下沒(méi)有define()函數(shù),全局函數(shù)有 //想要訪問(wèn)系統(tǒng)常量 echo PHP_VERSION; //space3下沒(méi)有define()函數(shù),全局函數(shù)有 //想要訪問(wèn)類 //錯(cuò)誤方案 //$m=new Mysqli('localhost','root','root');//系統(tǒng)會(huì)提示類不存在 //正確方案 $m= new Mysqli('localhost','root','root'); ?>
推薦 :php教程
站長(zhǎng)資訊網(wǎng)