PHP da OOP da Abstrakt Metodlar
Abstrakt klasslar shuningdek, abstrakt metodlarni o'z ichiga olishi mumkin. Bunday metodlar amalga oshirilishi shart emas, balki voris klasslarda bunday metodlar bo'lishi kerakligini ko'rsatish uchun ishlatiladi. Aslida bunday metodlarni amalga oshirish voris klasslarning vazifasidir.
Metodni abstrakt deb e'lon qilish uchun,
uni e'lon qilishda abstract kalit so'zini yozish kerak.
Keling, amalda sinab ko'raylik. Faraz qilaylik, User klassining barcha vorislari
increaseRevenue metodiga ega bo'lishi kerak.
Ushbu metod foydalanuvchi joriy daromadini olishi va uni parametr sifatida uzatilgan ma'lum bir qiymatga oshirishi kerak.
User klassi o'zi qanday daromad
olishini bilmaydi - axir ishchining maoshi,
talbaning esa stipendiyasi bor. Shuning uchun
har bir voris ushbu metodni o'ziga xos tarzda amalga oshiradi.
Bu erda muhim jihat shundaki, User klassining
abstrakt metodi dasturchini ushbu metodni voris klasslarda amalga oshirishga majburlaydi, aks holda PHP xatolik ko'rsatadi.
Shu tarzda siz yoki sizning kodingiz bilan ishlaydigan boshqa dasturchi,
voris klassda kerakli metodni amalga oshirishni hech qachon unutmaydi.
Shunday qilib, keling amalda sinab ko'raylik. User
klasiga increaseRevenue abstrakt metodini qo'shamiz:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Tanaisiz abstrakt metod:
abstract public function increaseRevenue($value);
}
?>
Employee klassimiz hozircha o'zgarishsiz qolsin.
Bunday holda, Employee klassi ob'ektini yaratmasdan,
shunchaki klasslarimiz aniqlangan kodni ishga tushirsangiz ham,
PHP xatolik ko'rsatadi.
Keling endi Employee klasida
increaseRevenue metodini amalga oshirishni yozamiz:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Metodni amalga oshirishni yozamiz:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Keling, klassimiz ishlashini tekshiramiz:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
increaseRevenue metodini Student
klasida ham amalga oshiramiz. Faqat endi bizning
metodimiz stipendiyani oshiradi:
<?php
class Student extends User
{
private $scholarship; // stipendiya
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metod stipendiyani oshiradi:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
User klassingizga xuddi shunday
increaseRevenue abstrakt metodini qo'shing.
Ushbu metodni amalga oshirishni Employee va
Student klasslarida yozing.
Figure klasida figura yuzasi va perimetrini olish uchun abstrakt metodlar yarating.