2010-08-13 18 views
20

i oldu wonderinf sen İki sınıf var ..PHP - genişletilmiş __construct

bana yardım edebilir misiniz, bir başka .. B sınıfı çeşitli nesneler tarafından genişletilmiş ve ortak veritabanı etkileşimleri için kullanılacaktır uzanır .. Şimdi, B sınıfını bağlanmasını ve sınıf A'dan veya herhangi bir harici girişten ayrılmadan bağlantıyı kesmesini istiyorum ..

Anladığımdan gelen sorun, genişletilmiş bir sınıfın otomatik olarak __construct işlevini çalıştırmayacağıdır. bunun bir yolu? peşin

Teşekkür ..

class a extends b 
{ 
    public function __construct() 
    { 
    } 

    public function validateStuff() 
    { 
     $this->insert_record(); 
    } 
} 

class b 
{ 
    public function __construct() 
    { 
     $this->connect(); 
    } 

    protected function connect() 
    { 
     return true; 
    } 

    public function insert_record() 
    { 
     return true; 
    } 
} 

cevap

55

Eğer çocuk sınıfı a örneğini ise sınıf b tanımlanan __construct() yöntem otomatik olarak çalışır veli, sürece sınıfında bir tanımlanmış bir __construct() yöntem yoktur. Bir __construct() yöntem A sınıfı tanımlanmıştır

class a extends b { 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 

, o zaman bu sınıf b __construct() yöntemin kullanımını geçersiz kılar .... Bu __construct() yöntem b sınıfı yerine çalışır

class a extends b { 
    public function __construct() 
    { 
     echo 'In A Constructor'; 
    } 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 

Çocuk sınıfınızda, tanımlanmış bir __construct() yöntemi varsa, bunu yürütmek istiyorsanız, ebeveyn için kurucuyu açıkça çağırmanız gerekir. Hiç sınıf a gelen kurucusunu çağırmak istemedik

class a extends b { 
    public function __construct() 
    { 
     parent::__construct(); 
     echo 'In A Constructor'; 
    } 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 
+3

Teşekkürler :) - stackoverflow bu tür iş akışlarında kendinizi şımartabileceğiniz ilgili bilgileri bulmada ve bulmada çok iyi, "bunu biliyorum, ama sadece bir yere giremediğimden emin olmak istiyorum." teşekkürler haha! – lol

10

ben tam ne soran anlamıyorum eminim ama sen anne diyoruz bulunuyor çocuğun yapıcı

parent::__construct(); 

gelen metodu inşa edebilirsiniz sadece bildiğim seçenek. a::__construct() yılında

+0

.. ben otomatik olarak çalışacak şekilde sınıf b'in yapıcı uygulamak için bir yöntem bulmak için umuyordum. – Lee

3

Çağrı parent::__construct():

class a extends b 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function validateStuff() 
    { 
     $this->insert_record(); 
    } 
} 

Size herhangi bir özel şeyler yapmıyoruz tamamen eğer bir yapıcısı atlayabilirsiniz.

+0

Kurucuyu sınıftan a aramak istemedim .. Otomatik olarak çalıştırmak için sınıf b'nin yapıcısını uygulamak için bir yöntem bulmayı umuyordum .. – Lee

+0

Ahh bu cevap oldu .. Kurucuyu A sınıfı terk ederek B sınıfı kaçtı! Teşekkürler! – Lee

İlgili konular