PHP
abstract method
abstract method ile gövdesiz method bildirimi ve alt sınıfta uygulamayı öğrenirsin.
abstract method: gövdesiz bildirim
Bir soyut sınıf, alt sınıfların kendine göre doldurması gereken metotlar bildirebilir. Buna abstract method denir. Gövdesi yoktur; yalnızca imza (method signature) yazılır ve noktalı virgülle biter.
Tanım şöyledir: abstract public function area(): float;. Dikkat: { } yok, gövde yok; imzanın sonunda ; var. Alt sınıf bu metodu kendi gövdesiyle uygulamak (concrete implementation) zorundadır.
Bu, ebeveyne 'her şekil bir alan hesaplar ama nasıl olduğunu sen bil' diyebilmenin yoludur. Sözleşmeyi ebeveyn koyar, uygulamayı çocuk yapar.
Abstract metot ve somut uygulama
Bir abstract metot tanımlamak için abstract anahtar kelimesini metodun başına yazarsın: abstract public function area(): float;. Gövde yerine sadece imza ve ; vardır.
Alt sınıf bu metodu aynı imzayla uygulamak zorundadır. İşte örnek:
abstract class Shape {
abstract public function area(): float;
}
class Circle extends Shape {
public function area(): float {
return 3.14;
}
}
$c = new Circle();
echo $c->area();
Circle abstract metodu uygulamazsa PHP hata verir. Uyguladığında $c->area() çağrısı 3.14 döndürür.
Uygulama Abstract metot: alt sınıfta uygula
Bir Shape soyut sınıfı tanımla. İçinde abstract public function area(): float; bildir (gövde yok, noktalı virgül). Ayrıca public function describe(): string metodu olsun ve return "Alan: " . $this->area(); döndürsün. Sonra Circle sınıfını Shape'ten türet ve area() metodunu return 3.14; ile uygula. $c = new Circle() ve echo $c->describe() . "\n".
Örnek çözümü göster
float; yaz. describe() içinde $this->area() çağır. Circle'da area() metodunu return 3.14; ile uygula.
Örnek çözüm:
<?php
// Shape soyut sınıfını tanımla, area() metodunu bildir
abstract class Shape {
abstract public function area(): float;
public function describe(): string {
return "Alan: " . $this->area();
}
}
class Circle extends Shape {
public function area(): float {
return 3.14;
}
}
$c = new Circle();
echo $c->describe() . "\n";
Kendini test et
-
Hangisi geçerli bir abstract method bildirimidir?
- abstract public function area(): float { return 0; }
- public abstract function area(): float = 0;
- abstract public function area(): float;
- function area(): float abstract;
Cevabı göster
abstract public function area(): float; — Doğru. abstract public function area(): float; gövdesiz ve noktalı virgülle biten doğru bildirimdir.
-
Abstract metot bildirimi
abstract class Shape {
____
}
Cevabı göster
abstract class Shape {
abstract public function area(): float;
}
-
Abstract method kavramlarını eşleştir
- abstract method
- Gövdesiz imza
- method signature
- Parametre ve dönüş tipi
- concrete implementation
- Alt sınıfta gövde
- noktalı virgül
- İmzayı bitirir
Sıradaki ders: Soyut sınıf mirası