php命名空间实现
PHP 命名空间的基本实现
命名空间通过 namespace 关键字声明,需放在文件顶部(除 declare 外)。语法为 namespace MyProject;,后续代码属于该命名空间。子命名空间用反斜杠分隔,如 namespace MyProject\Sub;。
使用命名空间中的类或函数
非限定名称(当前命名空间)直接使用类名,如 new Foo();。
限定名称(相对路径)从当前命名空间开始解析,如 new Sub\Foo();。
完全限定名称(绝对路径)从全局开始解析,如 new \MyProject\Foo();。
全局空间访问
全局类/函数需加反斜杠,如 \strlen() 或 new \DateTime()。避免与当前命名空间的同名类冲突。
命名空间别名与导入
通过 use 关键字导入其他命名空间的类/函数/常量:use MyProject\Foo; 后可直接用 new Foo();。
别名通过 use MyProject\Foo as Bar; 实现。
动态调用与命名空间
动态类名需用完全限定名称:$class = '\MyProject\Foo'; new $class();
函数调用同理:$func = '\MyProject\hello'; $func();
命名空间与自动加载
结合 spl_autoload_register 实现自动加载。文件路径需与命名空间匹配,例如 MyProject\Foo 对应 MyProject/Foo.php。
命名空间中的常量
使用 const 定义的常量受命名空间影响,需通过命名空间访问。全局常量需用 define 定义或通过完全限定名称。
示例代码片段
namespace MyProject;
use \OtherProject\Tool as Util;
use function \OtherProject\helper;
use const \OtherProject\MAX_SIZE;
class Logger {
public function log($msg) {
echo $msg;
}
}
// 使用导入的类
$util = new Util();
helper();
echo MAX_SIZE;
注意事项
- 命名空间声明必须位于文件顶部(除
declare外)。 - 多个命名空间可存在于同一文件,但不推荐。
- 无命名空间的代码属于全局空间,与命名空间代码共存时需用大括号分隔。







