从我的下面的代码中,我尝试使用namespace foo;
在类Cat中调用sayHi方法
但它不起作用,我必须使用“使用”来改变名称来调用它;
<?php
namespace foo;
class Cat
{
public static function sayHi()
{
echo "Meow";
}
}
namespace bar;
class Cat
{
public static function sayHi()
{
echo "Hello";
}
}
foo\Cat::sayHi(); //try to use backslash path but Fatal error: Class 'bar\foo\Cat' not found
?>
如果我使用Cat::sayHi();
,它总是从命名空间栏调用我不想要的方法。所以问题:是否有任何方法可以在不使用“use
”别名的情况下解决此问题?
答案 0 :(得分:3)
当您声明命名空间时,您的代码将在该命名空间内运行,直到您声明另一个命名空间,或直到文件末尾。你这样做了:
namespace foo;
class Cat {}
namespace bar;
class Cat {}
// here you are in namespace bar
foo\Cat::sayHi();
由于您已经在bar命名空间中,并且您的命名空间引用未锚定根命名空间,因此最后一行被解释为:
\bar\foo\Cat::sayHi();
只需锚定到根目录:
\foo\Cat::sayHi();
或者将您的电话foo\Cat::sayHi();
放在另一个档案中。