PHP-де ООЖ-дағы Абстракті әдістер
Абстракті кластар сонымен қатар абстракті әдістерді қамтуы мүмкін. Мұндай әдістердің ережесі болмауы керек, және олар тек осындай әдістер туыстық кластарда болуы керек екенін көрсету үшін қажет. Ал нақты осы әдістердің ережесін жазу - бұл туыстық кластардың міндеті.
Әдісті абстракті етіп жариялау үшін,
оны жариялау кезінде abstract
күлт сөзін жазу керек.
Практикада көрейік. User класының
барлық туыстарында increaseRevenue
әдісі болуы керек деп есептейік.
Бұл әдіс қолданушының ағымдағы табысын алып, ол параметр ретінде берілген белгілі бір санға көбейтуі керек.
User класының өзі туыстың нақты қандай
табыс алатынын білмейді - еңбек ақы алушы
жұмысшы үшін бұл жалақы, ал студент үшін - стипендия.
Сондықтан әрбір туыс бұл әдісті өзгеше
ережелейді.
Мұндағы мағынасы мынада: User класының
абстракті әдісі бағдарламашыны осы әдісті
туыстарда ережелеуге мәжбүрлейді, әйтпесе
PHP қате шығарады.
Осылайша сіз, немесе сіздің кодыңызбен
жұмыс істейтін басқа бағдарламашы,
туыста қажетті әдісті ережелеуді
ешқашан ұмыта алмайсыз.
Енді, практикада көрейік. User
класына increaseRevenue абстракті
әдісін қосайық:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Денесіз абстракті әдіс:
abstract public function increaseRevenue($value);
}
?>
Employee класымыз әлі өзгеріссіз
қалсын. Бұл жағдайда, тіпті Employee
класының нысанын жасамаса да,
тек біздің кластарды анықтайтын кодты іске
қосқанда - PHP қате шығарады.
Енді Employee класында increaseRevenue
әдісінің ережесін жазайық:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Әдістің ережесін жазайық:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Класымыздың жұмысын тексерейік:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
increaseRevenue әдісін Student
класында да ережелейік. Бірақ енді біздің
әдіс стипендияны көбейтеді:
<?php
class Student extends User
{
private $scholarship; // стипендия
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Әдіс стипендияны көбейтеді:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
User класыңызға дәл осындай
абстракті increaseRevenue әдісін қосыңыз.
Осы әдістің ережесін Employee және
Student кластарында жазыңыз.
Figure класында фигураның ауданы мен
периметрін алу үшін абстракті әдістер жасаңыз.