Miras zinciri
Birden fazla seviyeli miras zinciri kurmayı ve davranış çoğaltmayı öğrenirsin.
Çok seviyeli miras zinciri
Miras alma tek seviyede sınırlı değildir. Bir çocuk sınıfın kendisi de başka bir sınıfın ebeveyni olabilir. Böylece üç veya daha fazla seviyeli bir miras zinciri oluşur.
Örneğin Vehicle, Car ve ElectricCar üç seviyeli bir zincir kurar. ElectricCar, Car'dan; Car da Vehicle'dan miras alır. Her seviye yeni bir yetenek ekler.
Bu yapı, gerçek dünyadaki sınıflandırmayı modellemek için idealdir: bir Tesla hem araç, hem otomobil, hem de elektrikli araçtır.
Geçişli miras
Miras zincirinin önemli bir özelliği geçişli (transitive) olmasıdır. Yani A B'den, B de C'den miras alıyorsa, A otomatik olarak C'den de miras almış olur.
Bu nedenle ElectricCar bir örneği, Vehicle'ın metotlarını doğrudan çağırabilir; aradaki Car seviyesini atlayarak. PHP bu metotları sınıf hiyerarşisinde yukarı doğru arar.
Sınıf tasarımında zincirin her halkası anlamlı olmalı: her seviye, bir öncekine gerçek bir uzantı eklemeli.
Uygulama Vehicle → Car → ElectricCar zinciri kur
Bu derste Vehicle sınıfının info() metodu yalnızca brand döndürüyor. Sen, Car sınıfını Vehicle'dan, ElectricCar sınıfını da Car'dan türet. Car::drive() metodu $this->info() çağırıp sonuna " gidiyor" eklesin. ElectricCar::charge() metodu $this->drive() çağırıp sonuna ", şarj oluyor" eklesin. Tesla marka bir ElectricCar örneği yapıp charge() çıktısını yazdır.
Örnek çözümü göster
Car extends Vehicle, ElectricCar extends Car. drive() metodu $this->info() çağırır; charge() metodu $this->drive() çağırır.
Örnek çözüm:
<?php
class Vehicle {
public string $brand;
public function __construct(string $brand) {
$this->brand = $brand;
}
public function info(): string {
return $this->brand;
}
}
class Car extends Vehicle {
public function drive(): string {
return $this->info() . " gidiyor";
}
}
class ElectricCar extends Car {
public function charge(): string {
return $this->drive() . ", şarj oluyor";
}
}
$tesla = new ElectricCar("Tesla");
echo $tesla->charge();
Kendini test et
-
Vehicle → Car → ElectricCar zincirinde ElectricCar, Vehicle'ın bir metodunu çağırabilir mi?
- Evet, miras geçişlidir
- Hayır, yalnızca doğrudan ebeveynin metotlarını
- Yalnızca kendi tanımladığı metotları
- Sadece protected metotları
Cevabı göster
Evet, miras geçişlidir — Doğru; miras geçişlidir. ElectricCar, Vehicle'ın public/protected metotlarını kullanabilir.
-
Miras zincirini tamamla
class Car ____ Vehicle { // ... } class ElectricCar extends Car { // ... }Cevabı göster
class Car extends Vehicle { // ... } class ElectricCar extends Car { // ... } -
Miras zinciri kavramlarını eşleştir
- Miras zinciri
- Çok seviyeli miras
- Geçişli miras
- A->B->C zinciri
- Vehicle/Car/ElectricCar
- Üç seviyeli örnek
- Zincir tasarımı
- Her seviye ekleme yapar