Abstraktūs klasės OOP PHP
Tarkime, kad turite klasę User, o iš
jos paveldi klasės Employee ir
Student.
Be to, numanoma, kad kursite
Employee ir Student klasių objektus,
bet User klasės objektų – nekursite,
nes ši klasė naudojama tik
savo pavaldinių bendrųjų savybių ir metodų
grupavimui.
Tokiu atveju galima priverstinai uždrausti
kurti User klasės objektus, kad
jūs ar kitas programuotojas kažkur netyčia
jų nesukurtų.
Tam yra vadinamosios abstrakčios klasės. Abstrakčios klasės yra klasės, skirtos iš jų paveldėti. Be to, tokių klasių objektų negalima sukurti.
Norint paskelbti klasę abstrakčia,
reikia prie jos deklaracijos parašyti raktinį
žodį abstract:
<?php
abstract class User
{
}
?>
Taigi, parašykime abstrakčios
klasės User realizaciją. Tegu ji turi privatų
savybę name, taip pat getterius ir setterius
jai:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Bandymas sukurti User klasės objektą
sukels klaidą:
<?php
$user = new User; // išduos klaidą
?>
Tačiau paveldėti iš mūsų klasės bus
galima. Sukurkime klasę Employee, kuri
paveldės iš mūsų abstrakčios
klasės User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Sukurkime Employee klasės objektą -
viskas veiks:
<?php
$employee = new Employee;
$employee->setName('john'); // tėvo metodas, t.y. User klasės
$employee->setSalary(1000); // savas metodas, t.y. Employee klasės
echo $employee->getName(); // išves 'john'
echo $employee->getSalary(); // išves 1000
?>
Sukurkite abstrakčią klasę Figure,
atstovaujančią geometrinę
figūrą. Tegul iš jos paveldi klasės
apskritimui, stačiakampiui ir kvadratui.