2009-06-29 20 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。

私は何か間違っているのですか、誰か意見がありますか?

EDIT: ChildObjがそれにアクセスすることはできませんので、私は、私はあなたがプライベートとしてdataを宣言した$child = new ChildObj()

+0

さて、privateをprotectedに変更すると、プロパティへのアクセスが修正されます。 –

答えて

0

[OK]、問題は、メソッドが私のポストのように実際にプライベートではなくパブリックであると宣言されたため、$ dataプロパティと同じ症状に悩まされていました。

10

としてChildObjをインスタンス化していますことを明確にすべき - あなたはそれではなく、保護行う必要があります。

protected $data; 

私のPHP(5.2.8)ChildObj::method()を出力します - あなたは、古いバージョンを実行していますか?

+0

PHP 5.2.5を使用しています –