Mehrfachvererbung in PHP
In PHP wird keine mehrfache Vererbung im traditionellen Sinne unterstützt, bei der eine Klasse von mehreren Klassen erben kann. Es ist jedoch möglich, ähnliche Funktionalität durch die Verwendung von Schnittstellen und Traits zu erreichen.
Schnittstellen in PHP ermöglichen es einer Klasse, die Signatur von Methoden (jedoch nicht deren Implementierungen) von mehreren Schnittstellen zu erben. Das bedeutet, dass eine Klasse, die mehrere Schnittstellen implementiert, für alle in diesen Schnittstellen definierten Methoden eine Implementierung bereitstellen muss.
Traits hingegen ermöglichen es einer Klasse, Methoden und Eigenschaften von mehreren Traits zu erben. Das bedeutet, dass eine Klasse Methoden und Eigenschaften von mehreren Traits verwenden kann, als ob sie in der Klasse selbst definiert wären.
Sowohl Schnittstellen als auch Traits können verwendet werden, um eine ähnliche Funktionalität wie mehrfache Vererbung zu erreichen, haben jedoch wichtige Unterschiede in Bezug auf ihre Verwendung und die von ihnen bereitgestellte Funktionalität.
Hier ist ein Beispiel für die Verwendung von Schnittstellen, um eine ähnliche Funktionalität wie bei der Mehrfachvererbung zu erreichen:
<?php
interface Shape
{
public function getArea();
}
interface Color
{
public function getColor();
}
class Square implements Shape, Color
{
private $side;
private $color;
public function __construct($side, $color)
{
$this->side = $side;
$this->color = $color;
}
public function getArea()
{
return $this->side * $this->side;
}
public function getColor()
{
return $this->color;
}
}
$square = new Square(5, "red");
echo "The area of the square is: " . $square->getArea() . "\n";
echo "The color of the square is: " . $square->getColor() . "\n";
// Output:
// The area of the square is: 25
// The color of the square is: red
?>
Dieses Beispiel definiert zwei Schnittstellen Shape
und Color
, jede mit einer einzigen Methode. Dann definieren wir eine Klasse Square
, die beide Schnittstellen implementiert. Die Klasse Square
hat zwei Eigenschaften $side
und $color
und implementiert die Methoden getArea()
und getColor()
, wie von den Schnittstellen vorgeschrieben. Schließlich erstellen wir eine Instanz der Klasse Square
und geben ihre Fläche und Farbe mit den Methoden getArea()
und getColor()
aus, beziehungsweise.