Multiple Inheritance in PHP

In PHP, multiple inheritance is not supported in the traditional sense, where a class can inherit from multiple classes. However, it is possible to achieve similar functionality through the use of interfaces and traits.

Interfaces in PHP allow a class to inherit the signatures of methods (but not their implementations) from multiple interfaces. This means that a class that implements multiple interfaces must provide an implementation for all the methods defined in those interfaces.

Watch a course Learn object oriented PHP

Traits, on the other hand, allow a class to inherit methods and properties from multiple traits. This means that a class can use methods and properties from multiple traits as if they were defined in the class itself.

Both interfaces and traits can be used to achieve a similar functionality to multiple inheritance, but they have some important differences in terms of how they can be used and the functionality they provide.

Here's an example of using interfaces to achieve similar functionality to multiple inheritance:

<?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

?>

In this example, we define two interfaces Shape and Color, each with a single method. We then define a class Square that implements both interfaces. The class Square has two properties $side and $color, and implements the methods getArea() and getColor() as specified by the interfaces. Finally, we create an instance of the Square class and output its area and color using the methods getArea() and getColor(), respectively.