Metode abstracte în OOP în PHP
Clasele abstracte pot conține de asemenea metode abstracte. Astfel de metode nu trebuie să aibă implementare, ci sunt necesare pentru a indica că astfel de metode trebuie să existe la clasele descendente. Iar implementarea acestor metode - este deja sarcina claselor descendente.
Pentru a declara o metodă ca abstractă,
la declararea ei trebuie scris cuvântul cheie
abstract.
Să încercăm în practică. Să presupunem
că toate clasele descendente ale clasei User trebuie
să aibă metoda increaseRevenue.
Această metodă ar trebui să ia venitul curent al utilizatorului și să îl mărească cu o anumită valoare, transmisă ca parametru.
Însăși clasa User nu știe, ce anume
venit va avea clasa descendentă - la un angajat
acesta este salariul, iar la un student - bursa. Prin urmare
fiecare descendent va implementa această metodă
în mod propriu.
Esenta constă în faptul că metoda abstractă a clasei
User forțează programatorul să implementeze
această metodă în clasele descendente, altfel PHP va afișa o eroare.
Astfel, dvs., sau alt programator,
care lucrează cu codul dvs.,
nu veți putea uita în niciun fel
să implementați metoda necesară
în clasa descendentă.
Așadar, să încercăm în practică. Să adăugăm
metoda abstractă increaseRevenue
în clasa User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Metodă abstractă fără corp:
abstract public function increaseRevenue($value);
}
?>
Să presupunem că clasa noastră Employee rămâne temporar
fără modificări. În acest caz, chiar dacă nu
creăm un obiect al clasei Employee,
ci doar rulăm codul în care sunt definite
clasele noastre, - PHP va afișa o eroare.
Acum să scriem implementarea metodei
increaseRevenue în clasa
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Să scriem implementarea metodei:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Să verificăm funcționarea clasei noastre:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Să implementăm metoda increaseRevenue și
în clasa Student. Doar că acum
metoda noastră va mări deja bursa:
<?php
class Student extends User
{
private $scholarship; // bursa
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metoda mărește bursa:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Adăugați în clasa dvs. User aceeași
metodă abstractă increaseRevenue.
Scrieți implementarea acestei metode în clasele
Employee și Student.
În clasa Figure faceți metode
abstracte pentru obținerea ariei și perimetrului figurii.