概念
为了区分名字相同含义不同的函数、变量、常量等设立的功能
基本应用
使用 namespace 声明命名空间, namespace 需要写在 PHP 脚本的顶部, 必须是第一个 PHP 指令, 不要在前面出现非 PHP 代码、HTML 或空格。
命名空间可以在一个页面中出现多个, 从当前 namespace 到下一个 namespace 就是当前命名空间的范围, 但是建议在一个文件中只出现一个命名空间, 避免混乱
跨命名空间调用元素
不同命名空间是不能直接互相访问的, 需要使用 “空间名\元素名” 的方式调用, 如:
namespace Demo1
var $name;
namespace Demo2
echo \Demo1\$name;
子空间和公共空间
PHP 中的命名空间和文件系统很像, 可以定义子空间来描述空间之间的所属关系, 可以使用多层, 一般为公司域名倒置 + 项目名称, 如: xyz\hdiot\www\blog
没有设定命名空间的元素均属于公共空间, 在命名空间中调用默认空间中的元素的语法为: \元素名, 如: \Demo();
命名空间的名称和术语
- 非限定名称: 不包含前缀的类名称($u = new User()😉, 如果当前命名空间为 \xyz\hdiot, 则 User 将被解析为 \xyz\hdiot\User
- 限定名称: 包含前缀的名称($u = new hdiot\User()😉, 如果当前名称空间为 \xyz, 则 User 将被解析为 \xyz\hdiot\User
- 完全限定名称: 包含了全局前缀操作符的名称($u = new \hdiot\User()😉, 在这种情况下 User 将被解析为 \hdiot\User
别名和导入
别名可以看做是快捷使用命名空间的一种方法, 可以为命名空间/类设置别名, 避免了使用冗长的命名空间, 而是用简短的一串字符串代替
使用别名
使用 use 关键字为命名空间/类设置别名
use 命名空间 as 别名; // 为命名空间设置别名
use 命名空间\类 as 别名; // 为类设置别名
使用时将原本的命名空间/类替换成别名即可
注意事项
如果别名或者导入的命名空间中的元素, 与原命名空间的元素同名时, 会发生冲突, 产生致命错误
魔术常量
namespace: 当前命名空间
namespace: 当前命名空间
__NAMESPACE__: 当前命名空间名称