PHP 5.3 引入命名空間,這是該版本最重要的新特性之一。其概念與 C# 的命名空間相同,主要解決三類命名衝突:常數、函數、類別。通俗來說,命名空間就像建立目錄,將程式碼隔離在特定「目錄」中,避免與全域空間產生衝突。
<?php
/* |---------------------------------
| 命名空間示例
| @黑眼詩人 <www.chenwei.ws>
|--------------------------------- */
namespace myself;
function var_dump() {
echo 100;
}
var_dump(); // 呼叫自定義函數(相對路徑)
\myself\var_dump(); // 呼叫自定義函數(絕對路徑)
\var_dump(100); // 呼叫全域(系統)函數
?>
注意事項:
namespace 宣告之前不能有任何程式碼(除 declare() 外)。namespace \myself\good,相當於多層目錄結構。雖然語法上允許,但實務上不建議這樣做,主要用於將多個腳本合併在單一檔案的特殊情境。
<?php
namespace nihao\shijie;
function demo() { /* ... */ }
namespace hello\world;
function test() { /* ... */ }
\nihao\shijie\demo();
\hello\world\test();
?>
<?php
namespace nihao\shijie {
function test_one() { /* ... */ };
}
namespace hello\world {
function test_two() { /* ... */ };
}
\nihao\shijie\test_one();
\hello\world\test_two();
?>
myself。nihao\shijie。\nihao\shijie(絕對路徑概念)。use 關鍵字用於匯入或建立別名,提高程式碼可讀性:
<?php // 定義別名 use \Zend\Http\PhpEnvironment as pe; $foo = new \pe\Bar(); // 省略 as,直接使用最後一段作為別名 use \Zend\Http\PhpEnvironment; $foo = new \PhpEnvironment\Bar(); ?>
官方文件說明命名空間的兩大用途:
若出現語法錯誤,請確認 PHP 版本是否 ≥ 5.3.0。PHP 5.3 之前不支援命名空間。