php中名稱空間詳解
阿新 • • 發佈:2018-12-02
* 一、定義名稱空間
* 名稱空間主要針對:類,函式和常量,因為他們的作用域是全域性的,產生命名衝突的可能性很大
* 1. 關鍵字: namespace
* 作用:1. 定義名稱空間; 2.顯示的訪問當前名稱空間,類似於self;
* 2. 常量: __NAMESPACE__: 當前名稱空間字串,全域性為空字元
* 3. 宣告空間前不宜有除了declare之前的語句
namespace one; //常量 const SITE = 'php是世界上最好的語言'; //函式 function house(){ return '我家在北京有套300平米的房子'; } //類 class Hobby { public static $hobby = 'swim'; } //空間魔術常量 __NAMESPACE__ echo '當前名稱空間的名稱是:'.__NAMESPACE__.'<br>'; //訪問當前空間中的變數 //關鍵字:namespace 引入了當前空間 echo '站點名稱:'.namespace\SITE.'<br>'; echo '站點名稱:'.SITE.'<br>'; echo '哈哈哈'.namespace\Hobby::$hobby.'<br>'; //訪問函式 echo '訪問當前空間的函式:'.house().'<br>'; echo '訪問當前空間的函式:'.namespace\house().'<br>'; echo '<hr>'; //可以在一個指令碼中建立多個名稱空間 namespace two; const DOMAIN = 'www.zbdx.cn'; class User{ public static $name = 'admin'; } echo '當前名稱空間的名稱是:'.__NAMESPACE__.'<br>'; echo '站點域名:'.namespace\DOMAIN.'<br>'; echo '站點名稱'.\one\SITE.'<br>'; // 全域性空間用 \ 類似於根 //非限定名稱 echo User::$name.'<br>'; // 限定名稱 (類似於全域性) echo \two\User::$name.'<br>'; //訪問one中hobby的成員,一定要從全域性開始: \ echo '我的愛好是:'.\one\Hobby::$hobby; //echo '我的愛好是:'.one\Hobby::$hobby; //取不到值 //如何在當前的空間中,訪問另一個空間中的成員呢? //需要使用完整的名稱空間名稱: 完全限定空間,從全域性空間開始,類似於檔案根目錄 //全域性空間使用 : '\' 字元表示
注:
如何在一個指令碼中宣告多個名稱空間
同一個指令碼中,聲明瞭多個名稱空間
namespace first{ echo __NAMESPACE__.'<br>'; class A { public static function index() { return '我的方法名是'.__METHOD__.'<br>'; } } function var_dump($name) { return '我叫'.$name; } echo var_dump('MJ'); //等價於 \first\var_dump() echo \var_dump('MJ').'<br>'; //如果在var_dump()前面加上 \ 說明是呼叫的php函式,否則是自己定義的函式 } namespace second{ echo __NAMESPACE__.'<br>'; class B{ public static function Metoo() { return '我在second中,我的方法名是'.__METHOD__.'<br>'; } } } namespace { class G { public static function Haaa() { return __METHOD__; } } echo G::Haaa().'<br>'; echo __NAMESPACE__.'111'.'<br>'; //全域性名稱空間名字為空 echo first\A::index().'<br>'; //first前的 \ 可加可不加 //換個姿勢 //使用關鍵字:namespace echo namespace\first\A::index(), '<br>'; //使用魔術常量: __NAMESPACE__ echo __NAMESPACE__.\first\A::index(), '<br>'; echo first\var_dump('DonnieKing').'<br>'; }
注:
如何匯入外部名稱空間
/**
* 使用別名或引用,匯入外部的完全限定名稱
* 1.為外部的 "類" 使用別名
* 2.為外部匯入的 "名稱空間" 使用別名
* 3.匯入空間或類別名,使用關鍵字:use
* 4.use 可同時匯入多個空間或類,但推薦一個use 只匯入一個
*
* 注意
* 1. 匯入的空間必須是完全限定的,空間前不要新增:\
* 2. 匯入並不是載入檔案,當前指令碼引用的外部檔案仍要單獨載入
* 3.
*
*/
//匯入空間使用的關鍵字 use namespace my_space; require './public/User.php'; use model\User as modelUser; //匯入空間別名,預設從全域性開始,不需要再加 \ class User { } echo \model\User::insert().'<br>'; //使用 \ 全域性下的空間 echo modelUser::insert().'<br>'; //匯入有空間名稱的函式庫,必須是php5.6+ require './public/func.php'; //匯入公共函式庫空間中的函式delete,並起一個短的別名: del use function func_lib\delete as del; echo del();