Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP名称空间和导入_Php_Namespaces - Fatal编程技术网

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中名称空间的问题

此代码不起作用:

<?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