命名空間在 PHP 5.0 曾被提議,後延至 PHP 6,最終提前在 PHP 5.3 釋出,解決類名衝突、提升代碼組織度的長期痛點。
<?php
namespace Project\Module;
class User {
const STATUS_OK = true;
public function register($data) { /* ... */ }
}
?>
必須位於文件最頂端(除 declare 外)。
$user = new Project\Module\User();
$user->register($register_info);
Project\Module\User;
Project\Module\Blog;
替代傳統 Project_Module_Blog 命名前綴,語義更清晰。
use Project\Module;
$user = new Module\User();
use Project\Module\User as ModuleUser;
$user = new ModuleUser();
use Project\Module\User::STATUS_OK as STATUS_OK;
echo STATUS_OK;
未聲明命名空間的類、函數、常量屬於全局空間,可用 \ 前綴顯式調用:
function foo() { ... }
foo(); // 正常調用
\foo(); // 顯式全局調用
function __autoload($classname) {
$classname = strtolower($classname);
$classname = str_replace('\\', DIRECTORY_SEPARATOR, $classname);
require_once dirname(__FILE__) . '/' . $classname . '.class.php';
}
// 調用
__autoload('Project\Module\User'); // 載入 Project/Module/User.class.php
命名空間配合 use/as 與自動載入,構建了現代 PHP 專案模組化、可擴展的代碼架構基石。