PHP名称空间,是否已在名称空间中?
我正在学习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
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命令不同。它不切换当前名称空间,而是创建一个别名。