PHP 命名空間總結

來源:互聯網
上載者:User

標籤:

PHP 5.3 及以上版本中引入了命名空間 的概念。

 

notes:

1. 在 PHP 中,命名空間用來解決在編寫 類庫應用程式 時建立 可重用 的 代碼如 函數 時碰到的兩類問題:

① 使用者編寫的代碼與 PHP 內部的 類 / 函數 / 常量 或 第三方類 / 函數 / 常量 之間的名字衝突;

② 為很長的標識符名稱 ( 通常是為了緩解第一類問題而定義的 ) 建立一個別名(或簡短)的名稱,提高原始碼的可讀性。

 

2. 如果一個檔案中包含命名空間,它必須在其它所有代碼之前聲明命名空間。

【例1】同目錄下的兩個 php 檔案

file 1:Member.php

<?phpnamespace member;class Member {    public $name;}

 

file 2:test.php

<?phpnamespace test;include ‘Member.php‘;$res = new \member\Member();var_dump($res);

引用 Member 類時需要使用 命名空間運算子(namespace operater,就是類前面的那個反斜線),PHP 將從命名空間棧的頂部開始尋找類。

 

要引用 Member 類,需要知道當前檔案在哪一個命名空間中,如:

a. 在 member 命名空間中,Member 類稱為 Member

b. 在 全域命名空間 中,稱為 member/Member

c. 在 其他明明空間中,稱為 \member\Member

 

執行 test.php,輸出:

object(member\Member)[1]  public ‘name‘ => null

 

 

3. 定義子命名空間

與目錄和檔案的關係很象,PHP 命名空間也允許指定層次化的命名空間的名稱。因此,命名空間的名字可以使用分層次的方式定義。

 

4. 使用命名空間:別名 / 匯入

允許通過別名引用或匯入外部的完全限定名稱,是命名空間的一個重要特徵。這有點類似於在類 unix 檔案系統中可以建立對其它的檔案或目錄的符號串連。

所有支援命名空間的PHP版本支援三種別名或匯入方式:為類名稱使用別名、為介面使用別名或為命名空間名稱使用別名。PHP 5.6 開始允許匯入函數或常量或者為它們設定別名。

 

【例2】

file 1:Member.php

<?phpnamespace MyProject\member;class Member {    public $name;    public static function getName(){        return ‘my name is dee‘;    }}

 

file 2: test.php

<?phpnamespace test;use MyProject\member;include ‘Member.php‘;echo member\Member::getName();

<?phpnamespace test;use MyProject\member as m;include ‘Member.php‘;echo m\Member::getName();

輸出:my name is dee

 

至於在架構中沒有使用 include 函數 是由於使用了 __autoload 函數自動負載檔案,但是該函數只能在 非命名控制項下 定義,也就是 全域 情況下:

Member.php

<?phpclass Member {    public $name;    public static function getName(){        return ‘my name is dee‘;    }}

 

test.php

<?phpfunction __autoload($classname){    include $classname.‘.php‘;}    echo Member::getName();

 

如果在已經有了 命名空間 的類中,可以使用函數 spl_auto_register 來註冊一個類中的方法來代替 __autoload 函數(參見 http://blog.csdn.net/sky_zhe/article/details/38523145)。

 

 

5. 可以通過 __NAMESPACE__ 查看當前明明空間:

<?phpnamespace test;function testNamespace(){    return __NAMESPACE__;}echo testNamespace();

輸出:test

 

 

參考:

http://www.php.net/manual/zh/language.namespaces.php

http://www.oschina.net/question/147332_138188

http://higrid.net/hi/docs/php-namespace-and-autoload

http://php.net/manual/zh/function.spl-autoload-register.php

 

PHP 命名空間總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.