我试图在同一个文件上运行这段代码:
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;
干杯!