<?php
// 定義命名空間(必須是檔案第一行非註解代碼)
namespace Bak\Ba\Ba;
function bab() {
echo 'bi';
}
// 另一個命名空間
namespace Kkk;
function k1() {
echo 'k1';
}
// 在 Kkk 空間下呼叫 Bak\Ba\Ba\bab()
\Bak\Ba\Ba\bab(); // 前導 \ 表示全域空間起始
// 使用別名
use \Bak\Ba\Ba as B; // 前導 \ 可省略
B\bab(); // 透過別名呼叫,前面不加 \
// 當前空間函式正常呼叫
k1();
| 場景 | 寫法 | 說明 |
|---|---|---|
| 定義 | `namespace A\B;` | 檔案開頭,同檔可多段定義 |
| 非限定名 | `foo()` | 解析為 `當前空間\foo` |
| 限定名 | `A\foo()` | 解析為 `當前空間\A\foo` |
| 完全限定名 | `\A\B\foo()` | 前導 `\` 從全域根解析 |
| 導入別名 | `use A\B as C;` | 編譯時別名,不影響執行時動態特性 |
| 導入函式/常數 | `use function A\B\func; use const A\B\CONST;` | PHP 5.6+ |
$ns = 'Bak\Ba\Ba';
$func = 'bab';
$ns . '\\' . $func(); // 錯誤:嘗試呼叫常數
call_user_func($ns . '\\' . $func); // 正確
// 或
$fqn = "\\{$ns}\\{$func}";
$fqn();
遵循 PSR-4:`namespace App\Controller` 對應 `src/Controller/`,`composer dump-autoload` 即可自動載入,無需手動 `include`。