PHP名称空间错误(名称已被使用)


PHP namespace Error (the name is already in use)

我试图在同一个文件上运行这段代码:

namespace Foo1'Bar'SubBar;
class SubBarClass {
    public function __construct() {
        echo 'From Foo1';
    }
}

namespace Foo2'Bar'SubBar;
class SubBarClass {
    public function __construct() {
        echo 'From Foo2';
    }
}

use Foo1'Bar'SubBar;
$foo1 = new SubBarClass;

use Foo2'Bar'SubBar;
$foo2 = new SubBarClass;

这个想法是改变命名空间并回显相关的值。但是它返回了以下错误:

(!)致命错误:无法使用Foo2'Bar'SubBar作为SubBar,因为名称已经在C:'wamp'www'xxx'namespaces.php中使用了

第30行:使用Foo2'Bar'SubBar;

如何在同一文件上交换名称空间?

呢!

use关键字用于导入要在当前文件作用域中访问的命名空间。它不作为一个命名空间"实例构造器"

您当前在Foo2'Bar'SubBar命名空间下。像类目录一样,当您在这里时,您应该从根目录(')访问其他名称空间:

$foo2 = new SubBarClass;
$foo1 = new 'Foo1'Bar'SubBar'SubBarClass;

没有必要对这些命名空间使用 use (尽管您可以,特别是当它们共享父命名空间时),它们已经在使用它们的同一个文件中声明了。

有关这方面的更多信息,请考虑阅读手册,手册中描述了在同一个文件中使用多个名称空间。

发生这种情况是因为最后定义的名称空间是当前活动的名称空间。所以,当我输入:

use Foo1'Bar'SubBar;

我仍然在最后定义的命名空间:Foo2'Bar'SubBar。因此,当我输入:

use Foo2'Bar'SubBar;

我正在尝试使用当前活动的命名空间。这就是返回致命错误的原因。

一个可能的解是:

namespace Foo1'Bar'SubBar;
class SubBarClass {
    public function __construct() {
        echo 'From Foo1';
    }
}

namespace Foo2'Bar'SubBar;
class SubBarClass {
    public function __construct() {
        echo 'From Foo2';
    }
}

use Foo1'Bar'SubBar;
$foo1 = new SubBar'SubBarClass;

echo '<br>';
$foo2 = new SubBarClass;

干杯!