首頁  >  文章  >  後端開發  >  php命名空間:別名與匯入實例詳解

php命名空間:別名與匯入實例詳解

伊谢尔伦
伊谢尔伦原創
2017-05-19 15:04:121934瀏覽

別名和導入可以看作呼叫命名空間的一種捷徑。允許透過別名引用或匯入外部的完全限定名稱,是命名空間的一個重要的特性。這有點類似於在 Linux 檔案系統中可以建立對其他檔案或目錄的軟連線。上一章節講解了命名空間中需要知道關於空間三種名稱的術語:非限定名稱、限定名稱、完全限定名稱#。只有先了解這三個名稱和術語,才能更好的學習和了解命名空間的別名和導入的內容。                       

php命名空間支援兩種使用別名或匯入方式:使用類別名稱使用別名,或使用別名為命名空間名稱使用別名。注意 php 導入函數或常數。在php 中,別名是透過操作符 use 來實現的。

下面是一個使用所有可能的導入方式的實例代碼:

<?php
namespace cn\my;  //声明命名空间 cn\my
class User{ }     // 当前空间下声明一个类
namespace shop;   // 在创建一个空间
use cn\my;        //导入一个命名空间
$my_User = new my\User();    //导入命名空间后可使用限定名称调用元素
use cn\my as u;            //命名空间使用别名
$my_User = new u\User();   //使用别名代替空间名
use cn\my\User;              //导入一个类
$my_User = new User();       //导入类后可使用非限定名称调用元素
use cn\my\User as myUser;   // 为类使用别名
$my_User = new myUser();   //使用别名代替空间名
?>

需要注意一點,如果在用use 進行導入的時候,當前空間有相同的名稱元素,將會發生致命錯誤。

其程式碼如下:

<?php
namespace cn\my;
class User{ }
namespace shop;
class User{ }
class myUser{ }
//导入一个类
use cn\my\User;
// 与当前空间的 User 发生冲突,产生致命错误
$my_user = new User();
// 为类使用别名
use cn\my\User as myUser;
// 与当前空间 myUser 发生冲突,产生致命错误
$my_user = new myUser();
?>

除了使用別名和匯入,還可以透過namespace 關鍵字和__NAMESPACE__魔法常數動態地存取元素。其中namespace 關鍵字表示目前空間,而魔法常數 __NAMESPACE__ 的值是目前空間的名稱, __NAMESPACE__可以透過組合字串的形式來動態呼叫。

其範例程式碼如下所示:

<?php
namespace cn\my;  //声明命名空间 cn\my
const PATH = &#39;cn\my&#39;;
class User{ }     // 当前空间下声明一个类
echo namespace\PATH;   //namespace 关键字表示当前空间 cn\my
$User = new namespace\User(); //使用namespace代替 \cn\my
echo __NAMESPACE__;    //魔法常量的值是当前空间名称 cn\my
$User_class =  __NAMESPACE__ . &#39;\User&#39;;  //组合称字符串并调用
$User = new $User_class;
?>

上面的動態呼叫的範例中,字串形式的動態呼叫方式,要注意的是使用雙引號的時候特殊字元可能會被轉義,例如在 "__NAMESPACE__ . "\User" " 中, "\User"在雙引號字串中會被轉義。另外,php在編譯腳本的時候就確定了元素所在的空間,以及導入的狀況。 而在解析腳本時字串形式的呼叫只能認為是非限定名稱和完全限定名稱,而永遠不可能是限定名稱。

以上就是php命名空間:別名和導入的介紹,朋友們需要多多練習和運用程式碼,熟練php命名空間對於使用PHP框架開發有巨大的幫助。

【相關教學推薦】

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

2.  影片教學:PHP5.6對命名空間的擴展:use可以導入函數和常數空間啦

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

#

以上是php命名空間:別名與匯入實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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