2具有相同类名的命名空间 - 是否需要使用“use”别名来调用第一个命名空间?

时间:2017-04-14 14:46:38

标签: php oop

从我的下面的代码中,我尝试使用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”别名的情况下解决此问题?

1 个答案:

答案 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();放在另一个档案中。