使用具有相同 ClassName 的其他命名空间扩展类
Posted
技术标签:
【中文标题】使用具有相同 ClassName 的其他命名空间扩展类【英文标题】:Extending a class with an other namespace with the same ClassName 【发布时间】:2011-03-27 19:42:10 【问题描述】:我正在尝试使用命名空间。我想在不同的命名空间中扩展一个类。类的名称是相同的。示例:
家长:
namespace Base;
class Section extends Skeleton
protected $id;
protected $title;
protected $stylesheet;
孩子:
namespace Base2;
use \Base\Section;
class Section
extends \Base\Section
这是一个使用 Doctrine 2 和 Zend Framework 的应用程序。 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
有什么想法吗?
【问题讨论】:
有这样的命名方案是不是有点混乱? 是的,但它不是真正的命名方案。只有 Section 部分是真实的。命名空间是随机的。 @Rene:你确定他们不是任意吗? 【参考方案1】:当你说
use \Base\Section
您正在将 Section 类拉入当前范围,当您想要创建一个名为 Section 的新类时会导致冲突。只需省略 use 语句即可。
【讨论】:
是的,类名和名称可能会造成混淆。每次看到这种类型的代码,都需要思考一下。【参考方案2】:只使用完全限定名
namespace Base2;
class Section
extends \Base\Section
或别名
namespace Base2;
use \Base\Section as BSection;
class Section
extends BSection
【讨论】:
以上是关于使用具有相同 ClassName 的其他命名空间扩展类的主要内容,如果未能解决你的问题,请参考以下文章
KUBERNETES03_命名空间Pod是什么Deployment多副本能力扩缩容自愈或故障转移滚动更新版本回退
XSLT 在与根元素具有相同命名空间声明的内部标记中缺少命名空间