PHP'de kalıtım ve polimorfizm, nesne yönelimli programlama (OOP) prensiplerinden olan temel kavramlardır.
Kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve davranışlarını miras almasıdır. Bir sınıf, başka bir sınıftan tüm özelliklerini ve metodlarını devralabilir. Kalıtım, kod tekrarını azaltır, kod yeniden kullanımını sağlar ve sınıflar arasında hiyerarşik ilişkiler oluşturur.
PHP'de kalıtım, extends
anahtar kelimesiyle sağlanır.
Aşağıdaki örnekte, Animal
sınıfı, hayvanların genel özelliklerini ve davranışlarını temsil eder. Cat
sınıfı, Animal
sınıfından kalıtım alır ve özel bir davranış olan meow()
metodunu ekler. Cat
sınıfı, Animal
sınıfının name
özelliğini ve eat()
metodunu kullanabilir.
class Animal {
public $name;
public function eat() {
echo "The animal is eating.";
}
}
class Cat extends Animal {
public function meow() {
echo "Meow!";
}
}
$cat = new Cat();
$cat->name = "Tom";
$cat->eat(); // Animal sınıfının eat() metodunu kullanır
$cat->meow(); // Cat sınıfının meow() metodunu kullanır
Polimorfizm, bir nesnenin farklı şekillerde davranabilmesidir. Aynı isimli metodlar farklı sınıflar tarafından farklı şekillerde uygulanabilir. Bu, daha genel bir sınıf türü üzerinden daha özelleştirilmiş sınıflara erişimi sağlar.
PHP'de polimorfizm, bir metodu ezme (override) veya bir sınıfın birden fazla arayüzü uygulamasıyla sağlanır.
Aşağıdaki örnekte, Shape
adında bir arayüz tanımlanır. Rectangle
ve Circle
sınıfları, Shape
arayüzünü uygular ve calculateArea()
metodunu farklı şekillerde uygular. Bu sayede, her iki sınıf da aynı isimli metodu çağırabilir ve farklı sonuçlar elde edebilir.
interface Shape {
public function calculateArea();
}
class Rectangle implements Shape {
private $width;
private $height;
public function __construct($width, $height) {
$this->width = $width;
$this->height = $height;
}
public function calculateArea() {
return $this->width * $this->height;
}
}
class Circle implements Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function calculateArea() {
return 3.14 * $this->radius * $this->radius;
}
}
$rectangle = new Rectangle(4, 5);
$circle = new Circle(3);
echo $rectangle->calculateArea(); // 20
echo $circle->calculateArea(); // 28.26
Sonuç olarak Kalıtım, sınıflar arasında miras alma ilişkisi oluştururken, polimorfizm ise farklı sınıfların aynı metodu farklı şekillerde uygulayabilmesini sağlar.