PHP 快速導覽 - 命名空間

命名空間 (namespace) 用來組織與管理程式碼,主要是為了避免不同程式檔案中定義相同的識別字 (identifier) 名稱(避免名稱衝突)。



我們的例子分成兩個檔案,第一個檔案 name01.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace Name01;
 
const DEMO = 1;
 
function demo() {
    return 2;
}
 
class Demo {
    static function do_something() {
        return 3;
    }
}
 
/* 《程式語言教學誌》的範例程式
    檔名:name01.php
    功能:示範 PHP 程式
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


定義命名空間空間用關鍵字 (keyword) namespace ,然後用反斜線隔開數個名稱,一個反斜線就代表一層
2
namespace Name01;


namespace 必須放在單獨的 .php 檔案中,而且要放在 <?php 的後面,若是嵌入在 HTML 文件裡會發生解譯錯誤。


我們在相同目錄(資料夾)的 name02.php 示範如何使用 Name01 定義的名稱,首先,當然是要 include name01.php 囉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
include 'name01.php';
 
const DEMO = 4;
 
function demo() {
    return 5;
}
 
class Demo {
    static function do_something() {
        return 6;
    }
}
 
echo demo() . "\n";
echo Demo::do_something() . "\n";
echo DEMO . "\n";
 
echo Name01\demo() . "\n";
echo Name01\Demo::do_something() . "\n";
echo Name01\DEMO . "\n";
                                   
echo \Name01\demo() . "\n";
echo \Name01\Demo::do_something() . "\n";
echo \Name01\DEMO;
 
/* 《程式語言教學誌》的範例程式
    檔名:name02.php
    功能:示範 PHP 程式
    作者:張凱慶
    時間:西元 2013 年 2 月 */
?>


name02.php 定義的名稱可直接使用
16
17
18
echo demo() . "\n";
echo Demo::do_something() . "\n";
echo DEMO . "\n";


若是使用 Name01 ,就必須加上 Name01 與反斜線
20
21
22
echo Name01\demo() . "\n";
echo Name01\Demo::do_something() . "\n";
echo Name01\DEMO . "\n";


單一反斜線為最上層的命名空間,因此全名是
24
25
26
echo \Name01\demo() . "\n";
echo \Name01\Demo::do_something() . "\n";
echo \Name01\DEMO;


執行結果如下



中英文術語對照
命名空間namespace
識別字identifier
關鍵字keyword


您可以繼續參考
命名空間


相關目錄
回 PHP 快速導覽
回 PHP 教材
回首頁


參考資料
http://www.php.net/manual/en/language.namespaces.rationale.php
http://www.php.net/manual/en/language.namespaces.definition.php
http://www.php.net/manual/en/language.namespaces.nested.php
http://www.php.net/manual/en/language.namespaces.definitionmultiple.php
http://www.php.net/manual/en/language.namespaces.basics.php
http://www.php.net/manual/en/language.namespaces.importing.php
http://www.php.net/manual/en/language.namespaces.global.php
http://www.php.net/manual/en/language.namespaces.fallback.php
http://www.php.net/manual/en/language.namespaces.rules.php
http://www.php.net/manual/en/language.namespaces.faq.php

沒有留言: