Abstrakte metoder i OOP i PHP
Abstrakte klasser kan også indeholde abstrakte metoder. Sådanne metoder bør ikke have implementering, men er nødvendige for at angive, at sådanne metoder skal være i nedarvede klasser. Og selve implementeringen af sådanne metoder - er allerede opgaven for de nedarvede klasser.
For at erklære en metode abstrakt,
skal du skrive nøgleordet abstract
ved dens erklæring.
Lad os prøve det i praksis. Antag, at
alle nedarvede klasser af klassen User skal
have metoden increaseRevenue.
Denne metode skal tage brugerens nuværende indkomst og forøge den med en vis værdi, overført som parameter.
Klassen User selv ved ikke, hvilken specifik
indkomst den nedarvede klasse vil have - for en medarbejder
er det en løn, mens for en studerende er det et stipendium. Derfor
vil hver nedarvet klasse implementere denne metode
på sin egen måde.
Pointen her er, at den abstrakte metode i klassen
User tvinger programmøren til at implementere
denne metode i de nedarvede klasser, ellers vil PHP give en fejl.
På denne måde kan du, eller en anden programmør,
der arbejder med din kode, på ingen måde
glemme at implementere den nødvendige metode
i den nedarvede klasse.
Så lad os prøve det i praksis. Lad os tilføje
en abstrakt metode increaseRevenue
til klassen User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Abstrakt metode uden krop:
abstract public function increaseRevenue($value);
}
?>
Lad vores klasse Employee forblive
uændret for nu. I dette tilfælde, selvom der ikke
oprettes et objekt af klassen Employee,
men blot kører koden, hvor vores klasser defineres,
- vil PHP give en fejl.
Lad os nu skrive implementeringen af metoden
increaseRevenue i klassen
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Lad os skrive implementeringen af metoden:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Lad os kontrollere vores klasse fungerer:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Lad os implementere metoden increaseRevenue og
i klassen Student. Kun nu vil vores
metode forøge stipendiet:
<?php
class Student extends User
{
private $scholarship; // stipendium
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metoden forøger stipendiet:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Tilføj til din klasse User den samme
abstrakte metode increaseRevenue.
Skriv implementeringen af denne metode i klassene
Employee og Student.
I klassen Figure lav abstrakte
metoder til at få figurens areal og omkreds.