使用具有相同类名的其他命名空间扩展类

2022-08-30 14:13:50

我正在尝试使用命名空间。我想在不同的命名空间中扩展一个类。类的名称是相同的。例:

父母:

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\Section 类时,它会抛出一个错误:

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

任何想法的?


答案 1

只需使用完全限定的名称

namespace Base2;

class Section 
    extends \Base\Section {
}

或混叠

namespace Base2;
use \Base\Section as BSection;

class Section 
    extends BSection {
}

答案 2

当你说

use \Base\Section

您正在将 Section 类拉入当前作用域,当您想要创建一个名为 Section 的新类时,会导致冲突。只需省略 use 语句即可。


推荐