PHP名称空间和导入
我有一个关于PHP中名称空间的问题 此代码不起作用:PHP名称空间和导入,php,namespaces,Php,Namespaces,我有一个关于PHP中名称空间的问题 此代码不起作用: <?php namespace My\Functions\Printing; class A { public function __construct() { echo __NAMESPACE__; } } namespace My; use My\Functions\Printing\A as A; $obj=new namespace\A(); 我不确定,但我认为问题在于使用namesp
<?php
namespace My\Functions\Printing;
class A {
public function __construct() {
echo __NAMESPACE__;
}
}
namespace My;
use My\Functions\Printing\A as A;
$obj=new namespace\A();
我不确定,但我认为问题在于使用namespace关键字
在第一个示例中,您位于我的命名空间中,因此namespace\A()。
关键字“namespace”引用当前命名空间
namespace My\Functions\Printing;
class A {
public function __construct() {
echo __NAMESPACE__;
}
}
namespace My;
use My\Functions\Printing\A;
use My\Functions\Printing\A as myAlias;
$obj=new namespace\A(); // instance of \My\A (doesn't exist)
$obj2=new A(); // instance of \My\Functions\Printing\A
$obj3=new myAlias(); // instance of \My\Functions\Printing\A
与往常一样,有关完整的详细信息,请参阅文档:My\Functions\Printing namespace类似
--我的\功能\打印
- A
导入前的“我的”命名空间如下所示:
--我的
导入后的“我的”名称空间应该如下所示(我认为)
--我的
- A
那么为什么我不能访问我的\A
我认为名称空间的结构没有改变,在“名称空间结构”之前的“名称空间导入区域”中进行PHP编译器检查
文档指定名称空间看起来像文件系统,这是错误的
如果另一个类的导入是“创建符号链接”,我必须能够从当前名称空间访问它。
我们可以从创建符号链接的目录或绝对路径访问该链接,但无法访问导入的类
有了新的道路。(\My\A)
为什么?我不明白。。。在第一个示例中,您尝试运行My\A,但显然不起作用。第二个例子是正确的方法。你的问题是什么?它就像这个例子一样有效。只需将它们视为目录即可。如果您位于目录(命名空间)中,则可以从该路径访问文件,或使用实际的完整路径。如果添加快捷方式(“使用”),则可以通过名称直接访问该链接。Laxus:use命令在我的命名空间中导入class a,因此我不明白为什么使用namespace\a(\My\a)不起作用。Nanne:可以,但使用use命令(在目录中创建链接)后,为什么我无法通过完整路径(\My\a)访问该类\My\A
不存在!您需要使用\My\Functions\Printing\A
阅读:I guest A解析为My\Functions\Printing\A,因为您使用的别名是“use My\Functions\Printing\A as A”;所以new\My\A仍然解析为\My\My\Functions\Printing\A。不,因为\My\A也不存在。
namespace My\Functions\Printing;
class A {
public function __construct() {
echo __NAMESPACE__;
}
}
namespace My;
use My\Functions\Printing\A;
use My\Functions\Printing\A as myAlias;
$obj=new namespace\A(); // instance of \My\A (doesn't exist)
$obj2=new A(); // instance of \My\Functions\Printing\A
$obj3=new myAlias(); // instance of \My\Functions\Printing\A