2010-08-10 50 views
20

我试图使用名称空间。我想在一个不同的命名空间中扩展一个类。这个班的名字是一样的。例如:使用具有相同ClassName的其他名称空间扩展类

父级:

namespace Base; 

class Section extends Skeleton { 

protected $id; 

protected $title; 

protected $stylesheet; 
} 

儿童:

namespace Base2; 
use \Base\Section; 

class Section 
    extends \Base\Section { 

} 

它是使用学说2和Zend框架的应用程序。 Base/Section使用的Skeleton类只是一个包含魔术方法(__get,_set等)的抽象类。

当我尝试实例化一个\和Base2 \科类,它抛出一个错误:

Fatal error: Cannot declare class Base2\Section because the name is 
already in use in /var/www/test/application/Models/Base2/Section.php 
on line 7 

任何想法的?

+0

有这样的命名方案是不是有点混淆? – 2010-08-10 13:56:22

+0

是的,但它不是真正的命名方案。只有部分是真实的。命名空间只是随机的。 – 2010-08-11 06:53:12

+1

@Rene:你确定他们不是_arbitrary_? – 2011-07-06 08:50:22

回答

40

只需使用完全合格的名称

namespace Base2; 

class Section 
    extends \Base\Section { 
} 

或者走样

namespace Base2; 
use \Base\Section as BSection; 

class Section 
    extends BSection { 
} 
+0

Thnx,这对我有用! – 2010-08-10 13:03:17

9

当你说

use \Base\Section 

你拉科级到当前范围而发生冲突时,你想创建一个名为Section的新类。只是省略使用声明。

相关问题