Abstrakte Methoden in OOP in PHP
Abstrakte Klassen können auch abstrakte Methoden enthalten. Solche Methoden sollten keine Implementierung haben, sondern dienen dazu anzugeben, dass solche Methoden bei den Nachkommen vorhanden sein müssen. Und die eigentliche Implementierung dieser Methoden - ist bereits die Aufgabe der Nachkommen.
Um eine Methode als abstrakt zu deklarieren,
sollte beim Deklarieren das Schlüsselwort
abstract geschrieben werden.
Lassen Sie uns es praktisch ausprobieren. Nehmen wir an,
dass alle Nachkommen der Klasse User
die Methode increaseRevenue haben
sollten.
Diese Methode sollte das aktuelle Einkommen des Benutzers nehmen und es um einen bestimmten Wert erhöhen, der als Parameter übergeben wird.
Die Klasse User selbst weiß nicht, welches genau
Einkommen der Erbe erhalten wird - denn bei einem Arbeitnehmer
ist es das Gehalt, und bei einem Studenten - das Stipendium. Daher
wird jeder Nachkomme diese Methode
auf seine eigene Weise implementieren.
Der Punkt hier ist, dass die abstrakte Methode der Klasse
User den Programmierer zwingt,
diese Methode in den Nachkommen zu implementieren, andernfalls gibt PHP einen Fehler aus.
So können Sie, oder ein anderer Programmierer,
der mit Ihrem Code arbeitet, auf keinen Fall
vergessen, die benötigte Methode
im Nachkommen zu implementieren.
Also, lassen Sie es uns praktisch versuchen. Fügen wir
die abstrakte Methode increaseRevenue
in die Klasse User ein:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Abstrakte Methode ohne Körper:
abstract public function increaseRevenue($value);
}
?>
Lassen Sie unsere Klasse Employee vorerst
unverändert. In diesem Fall, selbst wenn kein
Objekt der Klasse Employee erstellt wird,
sondern nur der Code ausgeführt wird, in dem unsere
Klassen definiert sind, - gibt PHP einen Fehler aus.
Schreiben wir nun die Implementierung der Methode
increaseRevenue in der Klasse
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Schreiben wir die Implementierung der Methode:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Prüfen wir die Funktionalität unserer Klasse:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Implementieren wir die Methode increaseRevenue auch
in der Klasse Student. Nur wird unsere
Methode nun das Stipendium erhöhen:
<?php
class Student extends User
{
private $scholarship; // Stipendium
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Methode erhöht das Stipendium:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Fügen Sie in Ihre Klasse User die gleiche
abstrakte Methode increaseRevenue hinzu.
Schreiben Sie die Implementierung dieser Methode in den Klassen
Employee und Student.
Machen Sie in der Klasse Figure abstrakte
Methoden zum Erhalten der Fläche und des Umfangs der Figur.