【问题标题】:Extending a class with an other namespace with the same ClassName使用具有相同 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:你确定他们不是任意吗?

标签: php namespaces


【解决方案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 {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2017-08-26
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    相关资源
    最近更新 更多