PHP da OOP da Abstrakt Sinflar
Faraz qilaylik, sizda User sinfi bor,
va undan Employee va Student
sinflari meros oladi.
Bunda, Employee va Student sinflari
obyektlarini yaratish nazarda tutilgan, lekin
User sinfi obyektlarini yaratish - nazarda
tutilmaydi, chunki bu sinf faqat o'z merosxo'rlarining
umumiy xususiyatlari va metodlarini guruhlash
uchun ishlatiladi.
Bunday holatda, User sinfi obyektlarini
yaratishni majburiy ravishda taqiqlash mumkin,
shunda siz yoki boshqa dasturchi ularni tasodifan
yaratib qo'ymasliklari uchun.
Buning uchun abstrakt sinflar deb ataladigan sinflar mavjud. Abstrakt sinflar o'zlaridan meros olish uchun mo'ljallangan sinflardir. Bunday sinflarning obyektlarini yaratib bo'lmaydi.
Sinflarni abstrakt deb e'lon qilish uchun,
uni e'lon qilishda abstract kalit so'zini
yozish kerak:
<?php
abstract class User
{
}
?>
Shunday qilib, keling User abstrakt
sinfining realizatsiyasini yozamiz. Unda
name private xususiyati, shuningdek
uning getter va setter metodlari bo'lsin:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
User sinfining obyektini yaratishga
urinish xatolikni keltirib chiqaradi:
<?php
$user = new User; // xatolik beradi
?>
Ammo bizning sinfimizdan meros olish mumkin
bo'ladi. Keling Employee sinfini yarataylik,
u bizning User abstrakt sinfimizdan
meros oladi:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Employee sinfining obyektini yarataylik
- hammasi ishlaydi:
<?php
$employee = new Employee;
$employee->setName('john'); // ota sinfning metodi, ya'ni User sinfining
$employee->setSalary(1000); // o'z sinfining metodi, ya'ni Employee sinfining
echo $employee->getName(); // 'john' ni chiqaradi
echo $employee->getSalary(); // 1000 ni chiqaradi
?>
Figure abstrakt sinfini yarating,
u geometrik shaklni ifodalasin. Undan
doira, to'rtburchak va kvadrat sinflari
meros olsin.