Php 2具有相同类名的命名空间-是否需要使用;使用「;要调用第一个命名空间的别名?

Php 2具有相同类名的命名空间-是否需要使用;使用「;要调用第一个命名空间的别名?,php,oop,Php,Oop,从下面的代码中,我尝试调用sayHi方法,在Cat类中使用名称空间foo 但它不起作用,我不得不用“用”来改名叫它 <?php namespace foo; class Cat { public static function sayHi() { echo "Meow"; } } namespace bar; class Cat {

从下面的代码中,我尝试调用sayHi方法,在Cat类中使用
名称空间foo
但它不起作用,我不得不用“用”来改名叫它

    <?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()它总是从名称空间栏调用我不想要的方法。因此问题:是否有任何方法不使用“
使用
”别名就可以解决此问题?

当您声明一个名称空间时,您的代码在该名称空间内运行,直到您声明另一个名称空间,或者直到文件结束。您正在这样做:

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()在另一个文件中。

当您声明一个名称空间时,您的代码将在该名称空间中运行,直到您声明另一个名称空间或文件结束。您正在这样做:

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()在另一个文件中