Özet - Miras alma
- PHP kursu
- Orta seviye
- Ders 18/115
- 5 dk
extends, parent:: ve override'la hayvan sınıf hiyerarşisi yazarsın.
Özet - Miras alma
Bu grupta miras alma (inheritance) konusunu öğrendin. Beş temel kavramı artık biliyorsun:
extendsile bir sınıftan miras almakparent::ile ebeveyne erişmek- Method override ile davranışı değiştirmek
protectedile çocuklara açık erişim- Çok seviyeli miras zinciri kurmak
Bu kavramlar birlikte sınıf hiyerarşileri kurmanın temelini oluşturur. Kod tekrarını azaltır, genişletilebilir yapılar sağlar ve gerçek dünyadaki "tür" ilişkilerini modellemene izin verir.
Son görevde bunların hepsini bir hayvan hiyerarşisinde birleştireceksin: Animal, Dog ve Puppy sınıfları yazacaksın.
Uygulama Animal → Dog → Puppy hiyerarşisi
Son görevde tüm öğrendiklerini birleştir! Animal sınıfı hazır geliyor; name property'si ve sound() metodu var ("Ses yok" döndürür). Sen: Dog sınıfını Animal'dan türet ve sound()'u override edip "Hav hav!" döndür. Puppy sınıfını Dog'dan türet ve sound()'u override edip parent::sound() . " (minik)" döndür. Pamuk isimli bir Puppy örneği yapıp adını ve sesini yazdır: echo $puppy->name . ": " . $puppy->sound();
Başlangıç kodu
<?php
// Hayvan sınıfı
class Animal {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
public function sound(): string {
return "Ses yok";
}
}
// Dog sınıfını Animal'dan extends ile türet
// sound() metodunu override et, "Hav hav!" döndürsün
// Puppy sınıfını Dog'dan extends ile türet
// sound() metodunu override et, ebeveynin sound() metodunu çağırıp " (minik)" ekle
// Pamuk isimli bir Puppy örneği yapıp adını ve sesini yazdırÖrnek çözüm
<?php
// Hayvan sınıfı
class Animal {
public string $name;
public function __construct(string $name) {
$this->name = $name;
}
public function sound(): string {
return "Ses yok";
}
}
// Köpek sınıfı
class Dog extends Animal {
public function sound(): string {
return "Hav hav!";
}
}
// Yavru köpek sınıfı
class Puppy extends Dog {
public function sound(): string {
return parent::sound() . " (minik)";
}
}
$puppy = new Puppy("Pamuk");
echo $puppy->name . ": " . $puppy->sound();Beklenen çıktı
Pamuk: Hav hav! (minik)
Miras alma grubunu bitirdin
Tebrikler! Miras alma grubunu tamamladın. Artık extends, parent::, override ve protected ile kod tekrarını önleyen, genişletilebilir sınıf hiyerarşileri kurabilirsin.
Bir sonraki grupta soyut sınıflar (abstract classes) ve arayüzler (interfaces) ile tanışacaksın. Bu yapılar, miras almanın yeteneklerini daha da güçlendirecek ve ortak şablonlar tanımlamana izin verecek.
Ara verip öğrendiklerini pekiştir; sonra birlikte devam edelim.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşağıdakilerden hangisi yanlış?
- extends ile miras alınır
- parent:: ile ebeveyne erişilir
- Çocuk yapıcı tanımlayınca ebeveyn yapıcısı otomatik çağrılır Doğru cevap
- private üyeye çocuk sınıf erişemez
Açıklama: bu ifade yanlış. Ebeveyn yapıcısı otomatik çağrılmaz, parent::__construct() gerekir.
2 Puppy'nin override'ını tamamla
public function sound(): string {
return ____::sound() . " (minik)";
}
public function sound(): string {
return parent::sound() . " (minik)";
}
Açıklama: parent::sound() ile ebeveynin metodunu çağırdın ve genişlettin.
3 Miras alma kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
extends |
Miras alma anahtar kelimesi |
parent:: |
Ebeveyne erişim |
override |
Aynı isimle yeniden tanımlama |
protected |
Çocuklara açık erişim |