Polymorphism (çok biçimlilik)
- PHP kursu
- Orta seviye
- Ders 50/115
- 5 dk
Aynı interface'i uygulayan farklı sınıfları ortak tipte kullanmayı öğrenirsin.
Polymorphism (çok biçimlilik)
Polymorphism, aynı interface'i uygulayan farklı sınıfların ortak tip olarak kullanılabilmesidir. Bir Shape interface'i hem Circle hem Square tarafından uygulandığında, ikisi de birer Shape'tir.
Bir fonksiyon function describe(Shape $shape) biçiminde interface tipinde parametre alabilir. İçeride $shape->area() çağrısı yapar; Circle veya Square geçilsen aynı çağrı çalışır.
Böylece kod, somut sınıfa değil sözleşmeye bağlı kalır. Yeni bir Shape sınıfı eklense bile describe fonksiyonu değişmez. Bu, açık-genişletilebilir tasarımın temelidir.
interface tipinde parametre
Bir fonksiyonun parametresini interface tipinde yazarsan, o interface'i uygulayan her sınıfı geçebilirsin. Örnek: function describe(Shape $shape): void { echo $shape->area(); }.
Artık describe(new Circle(2)) ve describe(new Square(3)) çağrılarının ikisi de geçerlidir. Fonksiyon somut sınıfı bilmez; yalnızca area() methodunun varlığına güvenir.
PHP, parametre olarak geçilen nesnenin interface'i uygulayıp uygulamadığını denetler. Uygulamıyorsa fatal error fırlatır. Bu, tip güvenliğini (type safety) sağlar.
Uygulama Shape ile polymorphism örneği
Önce interface Shape { public function area(): float; } tanımla. Sonra class Circle implements Shape ve class Square implements Shape yaz. Her ikisinde de private float property (Circle'da $radius, Square'de $side), __construct(float) yapıcı ve area() methodu olsun. Circle 3.14 * $this->radius * $this->radius, Square $this->side * $this->side döndürsün. Sonra function describe(Shape $shape): void { echo $shape->area() . "\n"; } yaz ve describe(new Circle(2)) ile describe(new Square(3)) çağır.
Başlangıç kodu
<?php
// Shape interface ve polymorphism örneğiÖrnek çözüm
<?php
// Shape interface ve polymorphism örneği
interface Shape {
public function area(): float;
}
class Circle implements Shape {
private float $radius;
public function __construct(float $radius) {
$this->radius = $radius;
}
public function area(): float {
return 3.14 * $this->radius * $this->radius;
}
}
class Square implements Shape {
private float $side;
public function __construct(float $side) {
$this->side = $side;
}
public function area(): float {
return $this->side * $this->side;
}
}
function describe(Shape $shape): void {
echo $shape->area() . "\n";
}
describe(new Circle(2));
describe(new Square(3));Beklenen çıktı
12.56 9
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 polymorphism neyi sağlar?
- Bir sınıfın birden çok ebeveyni olmasını
- Aynı interface'i uygulayan sınıfları ortak tipte kullanmayı Doğru cevap
- Property'lerin gizlenmesini
- Methodların private olmasını
Açıklama: polymorphism aynı interface'i uygulayan sınıfları ortak tip olarak kullanmayı sağlar.
2 interface tipinde parametre yaz
function describe(____ $shape) {
echo $shape->area();
}
function describe(Shape $shape) {
echo $shape->area();
}
Açıklama: describe(Shape $shape) ile parametre interface tipinde olur.
3 polymorphism ile ilgili ifadeleri eşleştir
| Kavram | Anlamı |
|---|---|
interface tipi |
Ortak parametre |
Circle, Square |
Aynı sözleşmeyi uygular |
describe($shape) |
İkisini de kabul eder |
$shape->area() |
Çağrı tek biçimli |
4 Aynı interface'i uygulayan sınıflar için ne doğrudur?
- Birbirinin yerine kullanılamazlar
- Yalnızca ebeveyn sınıf olarak kullanılabilirler
- interface tipinde parametreyle ortak kullanılabilirler Doğru cevap
- method isimleri farklı olmak zorundadır
Açıklama: Aynı interface'i uygulayan sınıflar interface tipinde parametreyle ortak kullanılır.