2016-12-25 117 views
1

我試圖訪問和修改父類中的數據,這些父類是另一個類的子級。 我有一個父類PHP中的多級繼承

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類,而不是抽象的。

回答

2

你得到NULL因爲Child類的__constructor不會被調用,這就是爲什麼c1Data屬性是NOT SET。你應該明確地呼籲Child__constructor

class GrandChild extends Child { 
    protected $c2Data; 

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

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

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

謝謝@u_mulder現在的工作。愚蠢的錯誤。 – Lexx