PHP中的多级继承

时间:2016-12-25 13:12:11

标签: php oop inheritance

我正在尝试访问和修改父类中的数据,该父类是另一个类的子类。 我有一个父类

class GrandParent {
    protected $data = 1;

    public function __construct() {}

    public function getData() {
        return $this->data;
    }
}

以下是我的第一级孩子

class Child extends GrandParent {
    protected $c1Data;

    public function __construct() {
        $this->c1Data = parent::getData();
        $this->c1Data = 2;
    }

    public function getData() {
        return $this->c1Data;
    }
}

如果我尝试实例化Child类并执行getData(),我得到2这是正常的。我还有另一个继承Child的课程。

class GrandChild extends Child {
    protected $c2Data;

    public function __construct() {
        $this->c2Data = parent::getData();
    }

    public function getData() {
        return $this->c2Data;
    }
}

问题是,如果我尝试实例化GrandChild我并获取数据,我将获得null。是否可以让我的GrandChild类继承$c1Data = 2并使用它。我还希望能够自己使用ChildGrandParent类,而不是抽象的。

1 个答案:

答案 0 :(得分:2)

您收到NULL,因为__constructor类的Child未被调用,这就是c1Data属性未设置的原因。您应该明确要求Child __constructor

class GrandChild extends Child {
    protected $c2Data;

    public function __construct() {
        // here
        parent::__construct();

        $this->c2Data = parent::getData();
    }

    public function getData() {
        return $this->c2Data;
    }
}