【问题标题】:Can I create a child class out of a parent class?我可以从父类创建子类吗?
【发布时间】:2018-05-29 19:10:02
【问题描述】:

假设我有一个类负责组成另一个类:

class ClassBuilder
{
    protected $baseClass;

    public function __construct()
    {
        $this->baseClass = new BaseClass();
    }

    public function set()
    {
        $this->baseClass->foo = 'bar';
    }

    // other methods to further modify BaseClass
}

class BaseClass
{
    public $foo;
}
class ChildClass extends BaseClass {}

我想在ClassBuilder 中创建一个方法,它允许我将其baseClass 属性更新为ChildClass 的实例,其属性值与当前的BaseClass 对象相同。我该怎么做?

public function update()
{
    // $this->baseClass = new ChildClass() with the current property values in BaseClass
}

【问题讨论】:

  • 听起来你在factory pattern之后,虽然我不相信你的实现是完全正确的......

标签: php oop inheritance clone


【解决方案1】:

我不确定您的整体方法是否正确,但唯一的方法是循环和设置:

public function update()
{
    $new = new ChildClass();

    foreach($this->baseClass as $name => $value) {
        $new->$name = $value;
    }   
    $this->baseClass =  $new;
    //or
    $this->baseClass = clone $new;
}

【讨论】:

  • 我想如果属性实际上是 protected 而不是 public,那我就必须使用反射,对吧?
  • 是的,我要去的是public $foo;。然后,您会遇到设置它们的问题。您可以考虑在BaseClass 中实现__get() 和在ChildClass 中实现__set(),和/或其中的方法以返回或设置一组属性。
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多