2017-04-14 79 views
0

从我下面的代码,我尝试用namespace foo; 调用sayHi的方法,在课堂猫,但它不能正常工作,我必须使用“使用”改变名称来称呼它;2命名空间相同的类名 - 是它需要使用“使用”的别名调用第一个命名空间?

<?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”别名解决这个问题的任何方法?

回答

3

在声明命名空间,你的代码命名空间中,直到你声明另一个,或直到文件结束运行。你这样做:

namespace foo; 
class Cat {} 
namespace bar; 
class Cat {} 
// here you are in namespace bar 
foo\Cat::sayHi(); 

既然你已经在酒吧命名空间,命名空间参考并不锚定根命名空间,这最后一行被解释为:

\bar\foo\Cat::sayHi(); 

简单锚到根:

\foo\Cat::sayHi(); 

或把您的电话foo\Cat::sayHi();在另一个文件中。