Abstraktsed klassid OOP-s PHP-s
Oletame, et teil on klass User, ja
sellest päritavad klassid Employee ja
Student.
Samal ajal eeldatakse, et te loote
klasside Employee ja Student objekte,
kuid klassi User objekte - ei,
kuna seda klassi kasutatakse ainult
oma pärijate üldiste omaduste ja meetodite
grupistamiseks.
Sellisel juhul saab sundkeelustada
klassi User objektide loomise, et
teie või mõni teine programmeerija kuskil neid kogemata
ei loeks.
Selleks on olemas nn abstraktsed klassid. Abstraktsed klassid on klassid, mis on mõeldud nendelt pärimiseks. Samal ajal ei saa selliste klasside objekte luua.
Selleks, et kuulutada klass abstraktseks,
peab selle deklaratsioonil kirjutama võtmesõna
abstract:
<?php
abstract class User
{
}
?>
Niisiis, kirjutame välja abstraktse
klassi User realisatsiooni. Olgu sellel privaatne
omadus name, ning ka selle jaoks getterid ja setterid:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Katse luua klassi User objekt
põhjustab vea:
<?php
$user = new User; // annab vea
?>
Kuid meie klassilt pärimine on
võimalik. Teeme klassi Employee, mis
pärib meie abstraktsest
klassist User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Loome klassi Employee objekti -
kõik töötab:
<?php
$employee = new Employee;
$employee->setName('john'); // vanema meetod, st klassi User meetod
$employee->setSalary(1000); // oma meetod, st klassi Employee meetod
echo $employee->getName(); // väljastab 'john'
echo $employee->getSalary(); // väljastab 1000
?>
Tehke abstraktne klass Figure,
mis esindab geomeetrilist
kujundit. Olgu sellest päritavad klassid
ringi, ristküliku ja ruudu jaoks.