Abstraktné triedy v OOP v PHP
Nech máte triedu User, a z nej
dedia triedy Employee a
Student.
Pričom sa predpokladá, že budete vytvárať
objekty tried Employee a Student,
ale objekty triedy User - nebudete,
pretože táto trieda sa používa len na
zoskupenie spoločných vlastností a metód svojich
dedičov.
V tomto prípade môžete nútene zakázať
vytvárať objekty triedy User, aby
ste vy alebo iný programátor niekde ich náhodou
nevytvorili.
Na to existujú takzvané abstraktné triedy. Abstraktné triedy predstavujú triedy, určené na dedenie od nich. Pričom objekty takých tried nemožno vytvoriť.
Na to, aby ste deklarovali triedu ako abstraktnú,
potrebujete pri jej deklarácii napísať kľúčové
slovo abstract:
<?php
abstract class User
{
}
?>
Takže, poďme napísať implementáciu abstraktnej
triedy User. Nech má súkromnú
vlastnosť name, a taktiež gettre a settre
pre ňu:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Pokus o vytvorenie objektu triedy User
spôsobí chybu:
<?php
$user = new User; // vypíše chybu
?>
Ale zdediť od našej triedy bude
možné. Urobme triedu Employee, ktorá
bude dediť od našej abstraktnej
triedy User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Vytvorme objekt triedy Employee -
všetko bude fungovať:
<?php
$employee = new Employee;
$employee->setName('john'); // metóda rodiča, t.j. triedy User
$employee->setSalary(1000); // vlastná metóda, t.j. triedy Employee
echo $employee->getName(); // vypíše 'john'
echo $employee->getSalary(); // vypíše 1000
?>
Urobte abstraktnú triedu Figure,
ktorá predstavuje geometrický
útvar. Nech z nej dedia triedy
pre kruh, obdĺžnik a štvorec.