Fikir DOM gibi bir ağaç oluşturmak için. Ancak bazı kısıtlamalar sadece belirli tip aslında diğer içerebilir ki, vardır.
Appendchild, replaceChild vb gibi bazı iyi bilinen js-fonksiyonları uygulamak için superclass | soyut sınıf | Ben bir arabirim kullanmak istiyorum
Ben sayfaları blokları içerebilir ve blokları blokları veya öğe içerebilir sınıfları sayfa, blok ve öğeyi, kullanıyorum.
Örnek: Sayfa Bir web sayfası, blok bir liste öğesi olabilir ve öğe bir liste öğesi unsur olabilir.
Ancak bu nesneleri sadece html-verilerinden daha fazlasını içeren ve kavramlar sadece düz HTML temsil ötesine geçer. It's an overall idea of managing items, wether they have an actual representation or are just abstract objects. The concept itself works for many different hierarchies.
Ne elde etmek istiyorum (bir çocuk ekleyerek tüm sınıflar için temelde aynıdır) mümkün olduğunca üst sınıf çok kod yeniden ama tip bir çocuk olarak eklemek için izin verilen türleri maç için ipuçları farklılık olduğunu.
Ben kendim buldum dört yolu vardır:
- Bana üst sınıfa ipucu yazın ama bu değiştirmek için değil sağlayan bir arabirim kullanın.
- Ben kamu yöntemleri ile bir üst sınıfı kullanmak, bu yüzden (önkoşulları heriting zaman olağan uygulamalara tamamen karşı olan) tipi ipuçlarını yeniden tanımlayabilirsiniz.
- Ben hala oldukça ilginç olmanın görünüyor, korumalı yöntemleri ile bir üst sınıfı kullanın.
- Ben herhangi bir üst sınıftan kurtulmak ve sadece hemen hemen aynı sınıf defalarca tanımlamak olsun.
- Ben tür ipuçları özelliği rağmen, türü kontrol etmek için bir yöntem kullanabilirsiniz.
Herkes hala cevaplamak için istekli olup olmadığını Yani, herhangi bir önerme, fikir ya da ipucu, seçim seçeneği için mutluyum. Ben yeterince sorunu tarif olabilir umuyoruz.
Ben cevapsız bir şey varsa ve bunu duymak için minnettarım ;)
Code
Superclass yolu (çalışıyor, ama sonları devralmasını uygulama ön koşul)
class Base {
public|protected function appendChild(Base $child) {
// do stuff
}
}
class Block extends Base {
public function appendChild(Block $child) {
parent::appendChild($child);
}
}
Arayüz yolu (çalışmaz. Değil gerekir)
interface Interface1 {
public function appendChild(Base $child);
}
class Base implements Interface1 {
public|protected function appendChild(Base $child) {
// do stuff
}
}
class Block extends Base{
public function appendChild(Block $child) {
parent::appendChild($child);
}
}
Edited parts are bold