Clase abstracte în OOP în PHP
Să presupunem că aveți o clasă User, iar de la
ea moștenesc clasele Employee și
Student.
În acest caz, se presupune că veți crea
obiecte ale claselor Employee și Student,
dar obiecte ale clasei User - nu veți crea,
deoarece această clasă este folosită doar pentru
gruparea proprietăților și metodelor comune ale
moștenitorilor săi.
În acest caz, puteți interzice forțat
crearea de obiecte ale clasei User, astfel încât
dvs. sau un alt programator undeva să nu le creeze accidental.
Pentru aceasta există așa-numitele clase abstracte. Clasele abstracte reprezintă clase destinate moștenirii de la ele. În același timp, obiectele unor astfel de clase nu pot fi create.
Pentru a declara o clasă ca abstractă,
trebuie să scrieți cuvântul cheie
abstract la declararea sa:
<?php
abstract class User
{
}
?>
Deci, să scriem implementarea clasei
abstracte User. Să presupunem că are o proprietate
privată name, precum și gettere și settere
pentru ea:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Încercarea de a crea un obiect al clasei User
va provoca o eroare:
<?php
$user = new User; // va da o eroare
?>
Dar moștenirea de la clasa noastră va fi
posibilă. Să facem clasa Employee, care
va moșteni de la clasa noastră abstractă
User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Să creăm un obiect al clasei Employee -
totul va funcționa:
<?php
$employee = new Employee;
$employee->setName('john'); // metoda părinte, adică a clasei User
$employee->setSalary(1000); // metoda proprie, adică a clasei Employee
echo $employee->getName(); // va afișa 'john'
echo $employee->getSalary(); // va afișa 1000
?>
Realizați o clasă abstractă Figure,
reprezentând o figură geometrică.
Să moștenească de la ea clase
pentru cerc, dreptunghi și pătrat.