限定类名 与 完全限定类名
命名空间通过关键字 namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
new 腾讯\Pony(); // 限定类名
new \腾讯\Pony(); // 完全限定类名
一般情况,无论是向别人介绍 "腾讯 Pony" 还是 "腾讯公司 Pony",都能听懂。即:在当前命名空间没有声明的情况下,限定类名和完全限定类名是等价的。因为如果不指定空间,则默认为全局(\)。
如果换成如下情况:
namespace 谷歌;
new 腾讯\Pony(); // 实际执行:谷歌\腾讯\Pony
new \腾讯\Pony(); //实际执行:腾讯\Pony
这段代码相当于,你在谷歌公司向其员工介绍Pony,这时一定要指明是 "腾讯公司的Pony"(即,完全限定类名),谷歌员工才会明白。
否则谷歌员工会认为腾讯是谷歌的一个下属子部门,而Pony只是其中的一位员工而已。
上面的例子展示了在命名空间下,使用限定类名和完全限定类名的区别:
完全限定类名 = 当前命名空间 + 限定类名
使用方式
1、导入后使用
/* 直接导入*/
use 腾讯\Pony;
$subC = new Pony(); // 腾讯\Pony(实际结果)
/* 设置别名 */
use 腾讯\Pony AS CEO;
new CEO(); // 腾讯\Pony(实际结果)
2、直接引用(完全限定类名引用)
/* 任何情况 */
new \腾讯\Pony();// 腾讯\Pony(实际结果)
第一种情况是:别人已经认识Pony了,你只需直接说名字,他就能知道你指的是谁。
第二种情况是:Pony就是他们的CEO,你直接说CEO,他可以立刻反应过来。
网友评论