Metodat Abstrakte në OOP në PHP
Klasat abstrakte gjithashtu mund të përmbajnë metoda abstrakte. Metoda të tilla nuk duhet të kenë implementim, por janë të nevojshme për të treguar se metoda të tilla duhet të jenë te pasardhësit. Dhe implementimi i metodave të tilla - është tashmë detyrë e pasardhësve.
Për të deklaruar një metodë si abstrakte,
gjatë deklarimit të saj duhet të shkruhet fjala
kyçe abstract.
Le të provojmë në praktikë. Le të supozojmë
që të gjithë pasardhësit e klasës User duhet
të kenë metodën increaseRevenue.
Kjo metodë duhet të marrë të ardhurat aktuale të përdoruesit dhe t'i rrisë ato me një vlerë të caktuar, të kaluar si parametër.
Vetë klasa User nuk e di se çfarë saktësisht
të ardhurash do të marrë trashëgimtari - në fund të fundit, për punonjësin
këto janë paga, ndërsa për studentin - bursa. Prandaj
çdo pasardhës do ta implementojë këtë metodë
në mënyrën e vet.
Thelbi këtu është se metoda abstrakte e klasës
User detyron programuesin të implementojë
këtë metodë te pasardhësit, përndryshe PHP do të shfaqë një gabim.
Kështu ju, ose një programues tjetër,
që punon me kodin tuaj, nuk do të jeni në gjendje
të harroni të implementoni metodën e nevojshme
te pasardhësi.
Pra, le të provojmë në praktikë. Le të shtojmë
metodën abstrakte increaseRevenue
në klasën User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Metodë abstrakte pa trup:
abstract public function increaseRevenue($value);
}
?>
Le të klasa jonë Employee të mbetet
për momentin pa ndryshime. Në këtë rast, edhe nëse
nuk krijohet objekt i klasës Employee,
por thjesht të ekzekutohet kodi, në të cilin përcaktohen
klasat tona, - PHP do të shfaqë një gabim.
Le të shkruajmë tani implementimin e metodës
increaseRevenue në klasën
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Le të shkruajmë implementimin e metodës:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Le të kontrollojmë punën e klasës sonë:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Le të implementojmë metodën increaseRevenue edhe
në klasën Student. Vetëm që tani
metoda jonë do të rrisë bursën:
<?php
class Student extends User
{
private $scholarship; // bursë
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metoda rrit bursën:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Shtoni në klasën tuaj User të njëjtën
metodë abstrakte increaseRevenue.
Shkruani implementimin e kësaj metode në klasat
Employee dhe Student.
Në klasën Figure bëni metodat
abstrakte për marrjen e sipërfaqes dhe perimetrit të figurës.