PHP名称空间,是否已在名称空间中?

PHP名称空间,是否已在名称空间中?,php,namespaces,Php,Namespaces,我正在学习PHP名称空间。有一小段我不明白,例如: use Hello\Hello2; require 'Hello/Hello2/Hello.php'; $h = new Hello2\Hello(); echo $h->sayHello(); 对我来说,当我说:使用Hello\Hello2时,我似乎在名称空间Hello2中,因此我不明白为什么我必须像这样实例化我的对象: $h=新Hello2\Hello() 为什么不这样做(因为我已经在名称空间Hello2中了) $h=新Hel

我正在学习PHP名称空间。有一小段我不明白,例如:

use Hello\Hello2;

require 'Hello/Hello2/Hello.php';

$h = new Hello2\Hello();

echo $h->sayHello();
对我来说,当我说:
使用Hello\Hello2
时,我似乎在名称空间Hello2中,因此我不明白为什么我必须像这样实例化我的对象:

$h=新Hello2\Hello()

为什么不这样做(因为我已经在名称空间Hello2中了)

$h=新Hello()

问候,


Marcel

重要的是要理解,使用这些
语句可以声明别名(隐式,如示例中的或显式)

所以当你写作的时候

使用Hello\Hello2;
你基本上是在写作

使用Hello\Hello2作为Hello2;
正如您为命名空间
Hello\Hello2
声明别名
Hello2
。将其视为一种搜索和替换机制

如果要直接使用类名,则必须使用该类的完全限定名:

使用Hello\Hello2\Hello;
...
新Hello();
更新:

为什么不这样做(因为我已经在名称空间Hello2中了)

不,您不在Hello2命名空间中。为了在名称空间中“存在”,必须使用
namespace
语句。一次可以在一个名称空间中,但可以声明多个
use
语句,这些语句同样是其他名称空间、类、函数甚至常量的“仅”别名(或快捷方式声明,如果您愿意)


有关详细信息,请参阅PHP手册:。

使用autoload,就像使用composer一样,您可以这样做。在你的演示中,也许你需要先要求,然后使用。您可以在同一命名空间中使用某个类。
use
语句与
cd
shell命令不同。它不切换当前名称空间,而是创建一个别名。