也许这是一个奇怪的问题,但我无法解决你写的时内部在php内部发生的事情:
use garcha\path\class;
Run Code Online (Sandbox Code Playgroud)
我不是在询问命名空间的用途,而是关于那个语句本身,即使它没有分配任何内存,我的意思是,当你甚至为某个类提供别名时:
use garcha\path\class as withNewName;
Run Code Online (Sandbox Code Playgroud)
它存放在哪里?或者它如何记住这些名字?它只在编译时发生吗?而不是运行时间?就像描述函数一样.
小智 3
这不是一个非常复杂的算法(对于 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()
}
Run Code Online (Sandbox Code Playgroud)