从父母那里返回子课程

时间:2014-02-28 10:54:23

标签: php class oop design-patterns

希望有人可以帮助我。

我想要一个'base / parent'类,它包含两个子类之间的公共功能,但我也希望base / parent的构造函数决定使用哪个子类 - 所以我可以简单地创建一个ParentClass实例,并使用ParentClass-> method();但它实际上在做的是决定使用哪个孩子并创建该孩子的实例。

我认为这样做的方法是返回新的ChildClass();在构造函数中,但get_class()返回'base / shared'方法中的ParentClass。

一个小例子(我的类比这更复杂,所以我可能看起来很奇怪,例如我不只是直接调用子类):

class ParentClass {
  private $aVariable;
  public function __construct( $aVariable ) {
    $this->aVariable = $aVariable;
    if ($this->aVariable == 'a') {
      return new ChildClassA();
    else {
      return new ChildClassB();
    }
  }

  public function sharedMethod() {
    echo $this->childClassVariable;
  }
}

class ChildClassA extends ParentClass {
    protected $childClassVariable;
    function __construct() {
        $this->childClassVariable = 'Test';
    }
}

class ChildClassB extends ParentClass {
    protected $childClassVariable;
    function __construct() {
        $this->childClassVariable = 'Test2';
    }
}

我想:

$ParentClass = new ParentClass('a');
echo $ParentClass->sharedMethod();

并期望输出为'测试'。

我还打算让一个子类有自己的方法,我可以使用$ ParentClass-> nonShareMethod()来调用它们。所以ParentClass既是“代理”又是“基础”。

1 个答案:

答案 0 :(得分:0)

您无法从child类执行parent类的方法!