Acemi OOP: classB Classa uzanır.

3 Cevap php

Ben OOP fonksiyon tabanlı PHP kodlama gitmek için kendime öğreniyorum. Ve bu durum:

ClassA holds many basic tool methods (functions). it's __construct makes a DB connection. ClassB holds specific methods based on a certain activity (extract widgets). ClassB extends ClassA because it uses some of the basic tools in there e.g. a database call.

Bir php dosyasında bir $a_class = new ClassA nesne (böylece yeni bir DB bağlantı) oluşturmak.

Şimdi ClassB bir yöntem gerekir. Ben do $b_class = new ClassB; ve bir yöntemini kullanan bir yöntem, çağrı bu kadar parent:: ClassA.

Bu örnekte, ClassA iki kez 'kullanılmış' yaşıyorum. Bir parent:: çağrı yoluyla nesne gibi Onces ve onces, böylece ClassA başka DB bağlantı oluşturur (ya da değil?).

Peki bu temel sınıflar ebeveyn, çocuk (genişletmek) durum için en iyi ayar nedir? Ben sadece tabii bir bağlantı yapmak istiyorum?

Ben bu $ b_class = new ClassB ($ a_object) gibi ClassB nesneyi iletmek için sevmiyorum; ya da en iyi yolu nedir?

D: Benimle düşünme ve yardım için teşekkürler

3 Cevap

Eğer her A sınıfı örneğini ihtiyaç gibi görünmüyor. Emin olun B sınıfı gerçekten böyle devralma kullanmadan önce is, A sınıfı bir. Eğer emin değilseniz kompozisyon içine bak.

B gerçekten A bir "gelişmiş versiyonu" - B sınıfı gerçekten kendinize sorun A sınıfı devralan olmamalıdır gibi açıklamanızı toplamak ne gelen, o sesler? Ve B sadece A bazı programını kullanarak değil, yalnızca üzerinde yöntemleri çağırmak gerekir, ya da belki onu oluşturan (bir üye değişkeni olarak içerir.)

Yinelenen bağlantıları önlemek için etrafına koruma çeşit koymak sürece bir kenara, ben, sen A yapıcı veritabanına bağlanmak gerektiğini sanmıyorum. Sen ve bağlı değilken iyi anlaşılmaktadır yüzden muhtemelen daha iyi Connect () ve kes () işlevleri var.

$class_a = new ClassA();
$class_b = new ClassB($class_a);

class ClassB {
    private $class_a;

    public function __construct(ClassA $class_a) {
        $this->class_a = $class_a;
    }
}

Ben yaptım Eğer ne yapmak istediğini doğru anlamak. Eğer veritabanına bağlantıyı çoğaltma olmadan ClassB her yöntemi ClassA yöntemler olabilir bu şekilde.