首頁 >後端開發 >php教程 >php中命名空間的聲明與使用

php中命名空間的聲明與使用

无忌哥哥
无忌哥哥原創
2018-06-28 15:52:391793瀏覽

* 命名空間的宣告與使用

 * 1.使用關鍵字:namespace

 * 2.php5.3

 * 3.namespace 之前不能有除了declare和註解以外的任何程式碼,html也不行

 * 4.命名空間預設從全域開始定位,全域空間用\表示,類似於根目錄

 * 5.如果目前腳本宣告了命名空間,則所有成員的存取,就必須使用命名空間,包括系統函數

//1. 宣告一個命名空間

namespace one;
class Demo{public $name='Peter Zhu';}
const SITE='PHP中文网';
function add($a,$b){return $a+$b;}


//如果我想宣告同名的類別,常數與函數可以再宣告一個命名空間

//2.一個腳本中允許有多個命名空間

//宣告命名空間:two,使用\tow\來引用

namespace two;

//現在宣告類別Demo,常數SITE,函數add,則不會衝突

class Demo{public $name='朱老师';}
const  SITE = 'www.php.cn';
function add($a,$b){return $a+$b;}

//相信大家看出來了,這非常像是在不同的目錄下面,允許創建同名檔案,原理是一樣的

echo (new Demo)->name, &#39;<br>&#39;; //默认输出的是当前空间的内容

//查看一下當前的命名空間是什麼?使用系統預置常數:__NAMESPACE__

echo &#39;当前命名空间是: &#39;,__NAMESPACE__,&#39;<br>&#39;;

/ /也可以帶上目前的命名空間來存取目前空間中的成員

//產生具有目前命名空間的類別名稱

$className = __NAMESPACE__.&#39;\Demo&#39;;
echo (new $className)->name,&#39;<br>&#39;;

//可以帶上完整的命名空間名稱,從全域空間\開始,相當於從根目錄開始

//專業術語: 完全限定名稱

echo (new \two\Demo)->name, &#39;<hr>&#39;;

//3.如何實作跨空間存取?

//如果我們要存取空間one中的Demo類別中的屬性,如何操作呢? 

//跨空間存取,與跨目錄存取檔案一樣,一定要帶上它完整的空間路徑

//例如我們要存取one空間的類別Demo中的成員

echo &#39;one空间的类成员:&#39;,(new \one\Demo)->name,&#39;<br>&#39;;

//4.在宣告了命名空間的腳本中,如何存取系統預先定義方法?

//例如宣告了一個單字元數組

$welcome = &#39;php中文网欢迎您&#39;;
\print_r($welcome); echo &#39;<br>&#39;;
print($welcome); echo &#39;<hr>&#39;;

//剛才我們說過,在空間中存取全域成員,必須要加\,這裡沒有加為什麼可以?

//因為如果使用者沒有加入,那麼會先在本空間中尋找有沒有var_dump()函數,

//如果沒有找到,再到全域空間查找,所以不報錯

//但如果我們在目前的two空間中也建立一個var_dump()函數,則只會執行

//目前空間中使用者自訂的var_dump(),系統同名函數不會被呼叫

#
function print_r($arg)
{
    echo &#39;我是当前空间声明的函数调用:&#39;.$arg;
}
print_r($welcome); echo &#39;<br>&#39;;

//等價呼叫語法:

\two\print_r($welcome);

//注意: 此print_r(),與系統內建的print_r()無任何關係,僅名稱相同而已

#//就好比,上海有條長江路,咱們合肥也有一條長江路一樣,這二條路除名稱一樣,再無任何關係

// 上海市寶山區長江路

#//合肥市廬陽區長江路

// 相信沒有人會認為這是同一條路?

//事實上,這二個函數的完整調用語句應該是這樣的:

//1.呼叫系統的:

\print_r($welcome);

//2.呼叫目前空間的:

\two\print_r($welcome);

//儘管後面名稱一樣,但是歸屬地是不同的

以上是php中命名空間的聲明與使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn