2009-06-29 180 views
6

覆蓋的方法我父類和子類,如下所示:訪問父屬性和PHP

abstract class ParentObj { 
    private $data; 
    public function __construct(){ 
     $this->data = array(1,2,3); 
     var_dump($this->data); 

     $this->method(); 
    } 
    public function method(){ 
     echo "ParentObj::method()"; 
    } 
} 
class ChildObj extends ParentObj { 
    public function __construct(){ 
     parent::__construct(); 
     var_dump($this->data); 
    } 
    public function method(){ 
     echo "ChildObj::method()"; 
    } 
} 

預期的輸出:

array(1,2,3) 
ChildObj::method() 
array(1,2,3) 

實際輸出:

array(1,2,3) 
ParentObj::method() 
NULL 

的問題是,子對象無法訪問數據屬性,而父對象拒絕調用chil中的重寫方法d。

我做錯了什麼,還是有人有什麼想法?

編輯:我要澄清,我實例化一個ChildObj爲$child = new ChildObj()

+0

好的,將private改爲protected以修復屬性訪問權限。 – 2009-06-29 13:25:59

回答

0

好了,問題是這些方法實際上聲明爲private,而不是公衆在我的崗位,因而遭受同樣的症狀爲$ data屬性。

10

您已經聲明data爲私有,所以ChildObj將無法訪問它 - 你需要它,而不是保護:

protected $data; 

我的PHP(5.2.8)打印ChildObj::method() - 你運行的是舊版本?

+0

我使用PHP 5.2.5 – 2009-06-29 13:18:41