Abstraktiluokat OOP:ssa PHP:ssä
Oletetaan, että sinulla on luokka User, ja
sitä perivät luokat Employee ja
Student.
Oletetaan, että aiot luoda
Employee- ja Student-luokkien
olioita, mutta et User-luokan olioita,
koska tätä luokkaa käytetään vain
ryhmittelyyn perijöidensä yhteisiä
ominaisuuksia ja metodeja.
Tässä tapauksessa voidaan pakottaa kieltämään
User-luokan olioiden luonti, jotta
sinä tai toinen ohjelmoija vahingossa
ei luo niitä.
Tätä varten on olemassa niin kutsutut abstraktit luokat. Abstraktit luokat ovat luokkia, jotka on tarkoitettu perittäviksi. Samalla tällaisten luokkien olioita ei voi luoda.
Luokan julistamiseksi abstraktiksi
sen ilmoituksen yhteydessä on kirjoitettava avainsana
abstract:
<?php
abstract class User
{
}
?>
Joten, kirjoitetaan abstraktin
luokan User toteutus. Olkoon siellä yksityinen
ominaisuus name, sekä getterit ja setterit
sille:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Yritys luoda User-luokan olio
aiheuttaa virheen:
<?php
$user = new User; // antaa virheen
?>
Mutta periytyä luokastamme on
mahdollista. Tehdään luokka Employee, joka
perii abstraktista
luokastamme User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Luodaan Employee-luokan olio -
kaikki toimii:
<?php
$employee = new Employee;
$employee->setName('john'); // vanhemman metodi, eli User-luokan
$employee->setSalary(1000); // oma metodi, eli Employee-luokan
echo $employee->getName(); // tulostaa 'john'
echo $employee->getSalary(); // tulostaa 1000
?>
Tee abstrakti luokka Figure,
joka edustaa geometristä
kuviota. Olkoon siitä perivät luokat
ympyrälle, suorakulmiolle ja neliölle.