Abstrakte metoder i OOP i PHP
Abstrakte klasser kan også inneholde abstrakte metoder. Slike metoder bør ikke ha implementering, men er nødvendige for å indikere at slike metoder bør være i underklasser. Og selve implementeringen av slike metoder - er allerede en oppgave for underklassene.
For å deklarere en metode som abstrakt,
skal du skrive nøkkelordet abstract
ved deklarasjonen.
La oss prøve i praksis. La oss anta
at alle underklasser av klassen User skal
ha metoden increaseRevenue.
Denne metoden skal ta brukerens nåværende inntekt og øke den med en viss verdi, overført som en parameter.
Selve klassen User vet ikke hvilken
inntekt underklassen vil ha - tross alt, for en ansatt
er det lønn, og for en student - stipend. Derfor
vil hver underklasse implementere denne metoden
på sin egen måte.
Poenget her er at den abstrakte metoden til klassen
User tvinger programmereren til å implementere
denne metoden i underklasser, ellers vil PHP gi en feil.
På denne måten kan du, eller en annen programmerer,
som arbeider med koden din, på ingen måte
glemme å implementere den nødvendige metoden
i underklassen.
Så, la oss prøve i praksis. La oss legge til
en abstrakt metode increaseRevenue
i klassen User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Abstrakt metode uten kropp:
abstract public function increaseRevenue($value);
}
?>
La klassen Employee for nå forbli
uendret. I dette tilfellet, selv om man ikke
oppretter et objekt av klassen Employee,
men bare kjører koden der klassene våre
defineres, - vil PHP gi en feil.
La oss nå skrive implementeringen av 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;
}
// La oss skrive implementeringen av metoden:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
La oss sjekke arbeidet til klassen vår:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
La oss implementere metoden increaseRevenue og
i klassen Student. Bare nå vil
metoden vår øke stipendet:
<?php
class Student extends User
{
private $scholarship; // stipend
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metoden øker stipendet:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Legg til i klassen User samme
abstrakte metode increaseRevenue.
Skriv implementeringen av denne metoden i klassene
Employee og Student.
I klassen Figure, lag abstrakte
metoder for å få figurens areal og omkrets.