首頁 >後端開發 >php教程 >php命名空間:非限定名稱、限定名稱、完全限定名稱實例詳解

php命名空間:非限定名稱、限定名稱、完全限定名稱實例詳解

伊谢尔伦
伊谢尔伦原創
2017-05-18 15:51:503682瀏覽

在php命名空間中,需要知道關於空間三種名稱的術語:非限定名稱、限定名稱、完全限定名稱,以及PHP是怎麼解析它們的。官方文件說得非常好,就直接拿來套了,了解它們對學習後面的內容很有幫助。前面了解到命名空間的子空間和公共空間,命名空間的呼叫語法像檔案路徑一樣是合理的,它允許我們自訂子空間來描述各個空間之間的關係。

命名空間中的三個名稱的術語如下所示:

#1.非限定名稱,或不包含前綴的類別名稱,例如$comment = new Comment();。如果目前命名空間是Blog\Article,Comment將被解析為Blog\Article\Comment。如果使用Comment的程式碼不包含在任何命名空間中的程式碼(全域空間中),則Comment會被解析為Comment。

2.限定名稱,或包含前綴的名稱,例如 $comment = new Article\Comment();。如果目前的命名空間是Blog,則Comment會被解析為Blog\Article\Comment。如果使用Comment的程式碼不包含在任何命名空間中的程式碼(全域空間中),則Comment會被解析為Comment。

3.完全限定名稱,或包含了全域前綴運算子的名稱,例如 $comment = new \Article\Comment();。在這種情況下,Comment總是被解析為程式碼中的文字名稱(literal name)Article\Comment。

其實可以把這三種名稱類比為檔名(例如comment.php)、相對路徑名(例如./article/comment.php)、絕對路徑名(例如/blog/article/comment. php),這樣可能會比較容易理解。

在這裡建立一個Blog 空間,使用非限定名稱,表示目前Blog空間,實例化以後這個呼叫將會被解析。使用限定名稱,表示相對於Blog空間,實例化以後這個呼叫將被解析成 Blog\Article\Comment(),注意類別前面沒有反斜線。使用完全限定名稱,表示絕對於Blog空間,實例化以後這個呼叫會被解析,注意類別前面有反斜線和沒有反斜線區別。

其範例程式碼如下:

<?php
//创建空间Blog
namespace Blog;
class Comment { }
//非限定名称,表示当前Blog空间
//这个调用将被解析成 Blog\Comment();
$blog_comment = new Comment();
//限定名称,表示相对于Blog空间
//这个调用将被解析成 Blog\Article\Comment();
$article_comment = new Article\Comment(); //类前面没有反斜杆\
//完全限定名称,表示绝对于Blog空间
//这个调用将被解析成 Blog\Comment();
$article_comment = new \Blog\Comment(); //类前面有反斜杆\
//完全限定名称,表示绝对于Blog空间
//这个调用将被解析成 Blog\Article\Comment();
$article_comment = new \Blog\Article\Comment(); //类前面有反斜杆\
//创建Blog的子空间Article
namespace Blog\Article;
class Comment { }
?>

其實之前介紹的一直在使用非限定名稱和完全限定名稱,現在它們終於有名稱了。

命名空間中的三個名稱和術語先了解這裡,下一章將會帶朋友們了解命名空間中的別名和導入。

【相關教學推薦】

1. 《php.cn獨孤九賤(4)-php影片教學

2.  影片教學:命名空間:我們雖然同名同性,但卻屬於不同時空

#3.  php程式設計從入門到精通全套教學

以上是php命名空間:非限定名稱、限定名稱、完全限定名稱實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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