專案擴大、引入第三方庫時,類別/函數/常數命名衝突在所難免。傳統方案:加前綴(如 MyProject_Database_MySQL),導致代碼冗長、可讀性差。PHP 5.3 引入 namespace 關鍵字 從語言層面解決。
<?php
namespace core_php:utility {
class textEngine {
public function uppercase($text) {
return strtoupper($text);
}
}
// 非 OO 介面封裝
function uppercase($text) {
$e = new textEngine;
return $e->uppercase($text);
}
}
// 命名空間外部使用:完整限定名稱 + ::
$e = new core_php:utility::textEngine;
print($e->uppercase("from object") . "<br>");
print(core_php:utility::uppercase("from function") . "<br>");
// 導入類別至全域命名空間
import class textEngine from core_php:utility;
$e2 = new textEngine; // 直接使用短名稱
?>
: 表示邏輯層級(如 animal:dog, animal:pig),但不可為首尾字元、不可連續雙冒號const VERSION = '1.0';// 導入單一成員 import class textEngine from core_php:utility; import function uppercase from core_php:utility; import constant VERSION from core_php:utility; // 導入某類型所有成員 import class * from core_php:utility; import function * from core_php:utility; import constant * from core_php:utility; // 導入所有類型所有成員 import * from core_php:utility;
| 維度 | 前綴法 | 命名空間 |
|---|---|---|
| 代碼長度 | 冗長(MyProject_Db_Mysql) | 簡潔(配合 import) |
| 可讀性 | 低 | 高 |
| 重構難度 | 高(全域搜尋替換) | 低(修改 namespace/import) |
| IDE 支援 | 弱 | 強(自動完成、跳轉、重構) |
| 邏輯分組 | 靠命名約定 | 語言原生支援 |
Vendor\Package\Class)import 互通本文描述的 namespace ... { } 大括號語法與 import 關鍵字為 PHP 5.3 早期提案/實作語法,正式版採用 namespace Vendor\Package; 無大括號、use 關鍵字替代 import。實際開發請參考官方文檔最新語法。