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