2009-06-29 25 views
6

yılında geçersiz kılınan yöntemler Ben şöyle Üst ve alt sınıfları:Erişme ebeveyn özellikleri ve 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()"; 
    } 
} 

beklenen çıkışı:

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

gerçek çıktı:

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

Sorun, alt nesnenin veri özelliğine erişememesi ve üst öğenin chil'deki geçersiz kılmayı çağırmayı reddetmesidir. d.

Yanlış bir şey yapıyorum mu, yoksa herhangi bir fikri olan var mı?

DÜZENLEME: ChildObj erişmek için mümkün olmayacaktır yüzden, ben sen özel olarak data ilan ettik $child = new ChildObj()

+0

Tamam, özel korunan düzeltmeleri, özellik erişimi değiştirir. –

cevap

0

Tamam, sorun aslında yöntemlerin özel olarak bildirildi, benim yayınımda olduğu gibi kamuya açıklanmadı, dolayısıyla $ data özelliği ile aynı belirtiye sahipti.

10

olarak ChildObj başlatmasını olduğumu açıklamak gerekir - Eğer yerine korumalı yapmak gerekir: Eğer eski bir sürümünü çalıştıran -

protected $data; 

Benim PHP (5.2.8) ChildObj::method() yazdırır?

+0

PHP 5.2.5 kullanıyorum –