Vererbung von einer Klasse und Implementierung eines Interfaces in OOP in PHP
Eine Klasse kann von einer anderen Klasse erben und dabei ein Interface implementieren. Betrachten wir ein praktisches Beispiel.
Angenommen, wir möchten eine Klasse Programmer erstellen,
die einen Namen, ein Gehalt und eine Liste von Sprachen hat,
die der Programmierer beherrscht.
Bisher ist unsere Beschreibung der Klasse sehr vage:
ja, die Klasse wird einen Namen, ein Gehalt, Sprachen haben -
aber welche Methoden wird unsere Klasse haben?
Lassen Sie uns unsere Klasse genauer mit Hilfe
eines Interfaces iProgrammer beschreiben:
<?php
interface iProgrammer
{
public function __construct($name, $salary);
public function getName();
public function getSalary();
public function getLangs();
public function addLang($lang);
}
?>
Angenommen, wir haben in unseren bereits implementierten
Klassen gestöbert und es stellt sich heraus, dass wir bereits eine ähnliche
Klasse Employee haben. Sie implementiert nicht alle
Methoden der Klasse Programmer, aber einen Teil.
Hier ist der Code unserer bereits existierenden Klasse:
<?php
class Employee
{
private $name;
private $salary;
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
public function getName()
{
return $this->name;
}
public function getSalary()
{
return $this->salary;
}
}
?>
Es ist logisch, in unserem Fall so zu machen, dass
unsere neue Klasse Programmer einen Teil der benötigten Methoden
von der Klasse Employee erbt (und einen Teil werden wir dann
in der neuen Klasse selbst implementieren):
<?php
class Programmer extends Employee
{
}
?>
Gleichzeitig wissen wir, dass die Klasse Pogrammer
das Interface iProgrammer implementieren soll:
<?php
class Programmer implements iProgrammer
{
}
?>
Lassen Sie uns die Vererbung von der Klasse
Employee und die Implementierung des Interfaces
iProgrammer kombinieren:
<?php
class Programmer extends Employee implements iProgrammer
{
}
?>
Es ergibt sich, dass unsere Klasse Pogrammer
von der Klasse Employee die Methoden
__construct, getName und getSalary erbt,
und die Methoden addLang und getLangs
müssen wir selbst implementieren:
<?php
class Programmer extends Employee implements iProgrammer
{
public function addLang($lang)
{
// Implementierung
}
public function getLangs()
{
// Implementierung
}
}
?>
Dem Interface iProgrammer ist es egal,
ob die Methoden der Klasse eigen sind oder geerbt wurden
- Hauptsache, alle beschriebenen Methoden sind
implementiert.
Kopieren Sie den Code meiner Klasse Employee
und den Code des Interfaces iProgrammer. Kopieren Sie nicht
meinen Entwurf der Klasse Programmer -
implementieren Sie diese Klasse selbstständig, ohne
auf meinen Code zu schauen.