Abstrakta metoder i OOP i PHP
Abstrakta klasser kan också innehålla abstrakta metoder. Sådana metoder bör inte ha någon implementering, utan behövs för att ange att sådana metoder måste finnas i avkomlingar. Och själva implementeringen av sådana metoder - är redan en uppgift för avkomlingar.
För att deklarera en metod som abstrakt,
ska man skriva nyckelordet abstract
vid dess deklaration.
Låt oss prova i praktiken. Låt oss anta
att alla avkomlingar av klassen User måste
ha metoden increaseRevenue.
Denna metod bör ta användarens nuvarande inkomst och öka den med ett visst belopp, som skickas som en parameter.
Själva klassen User vet inte exakt vilken
inkomst arvtagaren kommer att ha - för en anställd
är det lön, medan för en student är det stipendium. Därför
kommer varje avkomling att implementera denna metod
på sitt eget sätt.
Poängen här är att den abstrakta metoden i klassen
User tvingar programmeraren att implementera
denna metod i avkomlingar, annars kommer PHP att ge ett fel.
På så sätt kan du, eller en annan programmerare,
som arbetar med din kod, på inget sätt
glömma att implementera den nödvändiga metoden
i avkomlingen.
Så, låt oss prova i praktiken. Låt oss lägga till
en abstrakt metod increaseRevenue
i klassen User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Abstrakt metod utan kropp:
abstract public function increaseRevenue($value);
}
?>
Låt vår klass Employee förbli
oförändrad för nu. I det här fallet, även om vi inte
skapar ett objekt av klassen Employee,
utan bara kör koden där våra klasser definieras,
kommer PHP att ge ett fel.
Låt oss nu skriva implementationen 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;
}
// Låt oss skriva implementationen av metoden:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Låt oss kontrollera hur vår klass fungerar:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Låt oss implementera metoden increaseRevenue också
i klassen Student. Bara att nu kommer vår
metod att öka stipendiet:
<?php
class Student extends User
{
private $scholarship; // stipendium
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metoden ökar stipendiet:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Lägg till i din klass User en likadan
abstrakt metod increaseRevenue.
Skriv implementationen av denna metod i klasserna
Employee och Student.
Gör i klassen Figure abstrakta
metoder för att få figurens area och omkrets.