close

「命名空間」(namespace)是一種命名方式,用來組織各個類別,函式、常數等,它和這些元素的關係就像檔案系統中目錄與檔案的關係一樣,舉例來說,假設MyClass隸屬於 \A\B\C 命名空間,那麼若要建立一個名稱為Obj、隸屬於MyClass的物件,可以寫成如下:

$Obj = new \A\B\C\MyClass;

其中第一個反斜線 \ 表示「全域空間」(global space),就像檔案系統中的根目錄一樣,在PHP開始支援命名空間之前,或當PHP程式沒有定義任何命名空間時,所有類別、函式、常數等都是放在全域空間,至於其它反斜線 \ 則是用來連接命名空間內所包含的子命名空間、類別、函式、常數等,例如此處的 A、B、C均為子命名空間。

PHP支援命名空間目的:

  • 解決名稱衝突的問題:當您自己撰寫的PHP程式和PHP內建或其它人撰寫的類別、函式、常數發生名稱衝突時,可以利用命名空間來解決。
  • 提供設定別名的功能:當PHP程式裡面的類別、函式或常數的名稱太長或不易理解時,可以利用命名空間來設定簡短易讀的別名(alias)。

事實上,如果程式裡沒有遇到上面的問題,可以不用理會命名空間的概念,因為程式依然能夠正常執行,以下面兩段程式碼為例,功能是相同的,只是第二段程式碼有加入命名空間的概念。

<?php
    $Obj = new Class1;
?>

<?php
    $Obj = new \Class1;
?>


原則上,命名空間的命名方式及分類是依照類別、函式、常數的性質而定,同時PHP程式均放在全域空間 \ 內。若要在PHP程式中自訂命名空間,可以使用namespace關鍵字,下面是一個例子,它會在網頁上顯示變數Y的值,要注意的是namespace敘述必須放在檔案的最前端。

<?php
  namespace my\name;             //在全域範圍內定義my\name命名空間
  class MyClass {}                       //在\my\name命名空間內定義MyClass類別
  function Myfunction() {}          //在\my\name命名空間內定義Myfunction函式
  const MYCONST = 1;              //在\my\name命名空間內定義MYCONST常數
  $X = new \my\name\MyClass;    //建立MyClass類別的物件,寫成$X = new MyClass;亦可
  $Y = \my\name\MYCONST;        //定義Y為常數MYCONST,寫成$Y = MYCONST;亦可
  echo $Y;                                  //顯示Y的値
?>

如果使用 use 關鍵字將 my\name 命名空間的別名設定為 A 並插在 namespace my\name; 這行下面 

use my\name as A;

這樣 $X = new \my\name\MyClass;  和 $Y = \my\name\MYCONST; 

可以改成

$X = new A\MyClass;

$Y = A\MYCONST;

arrow
arrow
    文章標籤
    PHP
    全站熱搜
    創作者介紹
    創作者 mingyilai 的頭像
    mingyilai

    mingyilai的部落格

    mingyilai 發表在 痞客邦 留言(0) 人氣()