也许这是一个奇怪的问题,但是当你写作时我无法理解php内部发生的事情:
use garcha\path\class;
我不是在询问命名空间的用途,而是关于那个语句本身,即使它没有分配任何内存,我的意思是,当你甚至为某个类提供别名时:
use garcha\path\class as withNewName;
它存储在哪里?或者它如何记住这些名字?它只在编译时发生吗?而不是运行时间?就像描述函数一样。
答案 0 :(得分:2)
它不是一个非常复杂的算法(对于5.5,在5.6中描述的类名称部分是相同的)。
as
关键字,则此名称将用作别名。否则使用导入类名的最后一个组件(对于XXX \ YYY \ ZZZ,名称为ZZZ)。将其转换为小写。self
/ parent
,它不能用作别名的名称。这张桌子在哪里使用?
正在编译以解析类名。
关于别名还有一个有趣的事情 - 它具有作为命名空间块的范围:
<?php
namespace nsC
{
class classC {}
}
namespace nsA
{
use nsC\classC as importC;
new importC();
}
namespace nsB
{
// ERROR!
new importC(); // or \nsA\importC()
}