PHP'de OOP'de Soyut Sınıflar
Diyelim ki bir User sınıfınız var ve
ondan Employee ve Student
sınıfları kalıtım alıyor.
Bu durumda, Employee ve Student
sınıflarının nesnelerini oluşturacağınız
öngörülüyor, ancak User sınıfının
nesnelerini oluşturmayacaksınız, çünkü bu
sınıf sadece kendi mirasçılarının genel
özelliklerini ve yöntemlerini gruplamak
için kullanılıyor.
Bu durumda, User sınıfının nesnelerini
oluşturmayı zorunlu olarak yasaklayabilirsiniz,
böylece siz veya başka bir programcı bir yerde
yanlışlıkla oluşturmaz.
Bunun için sözde soyut sınıflar vardır. Soyut sınıflar, onlardan kalıtım almak için tasarlanmış sınıflardır. Aynı zamanda bu tür sınıfların nesneleri oluşturulamaz.
Bir sınıfı soyut olarak bildirmek için,
bildiriminde abstract anahtar kelimesini
yazmanız gerekir:
<?php
abstract class User
{
}
?>
Öyleyse, User soyut sınıfının
gerçekleştirimini yazalım. Onun özel
bir name özelliği ve ayrıca bunun
için getter'lar ve setter'lar olsun:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
User sınıfının bir nesnesini oluşturma
girişimi bir hataya neden olacaktır:
<?php
$user = new User; // hata verecek
?>
Ancak sınıfımızdan kalıtım almak mümkün
olacaktır. Soyut User sınıfımızdan
kalıtım alacak bir Employee sınıfı
yapalım:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Employee sınıfının bir nesnesini
oluşturalım - her şey çalışacaktır:
<?php
$employee = new Employee;
$employee->setName('john'); // üst sınıfın yöntemi, yani User sınıfı
$employee->setSalary(1000); // kendi yöntemi, yani Employee sınıfı
echo $employee->getName(); // 'john' yazacak
echo $employee->getSalary(); // 1000 yazacak
?>
Geometrik bir şekli temsil eden soyut
bir Figure sınıfı yapın. Ondan
daire, dikdörtgen ve kare için sınıflar
kalıtım alsın.