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.