Uma Interface permite que os usuários criem programas especificando os métodos públicos que uma classe deve implementar, sem envolver as complexidades e os detalhes de como os métodos específicos são implementados. Geralmente é referido como o próximo nível de abstração. Assemelha-se aos métodos abstratos, assemelhando-se às classes abstratas. Uma Interface é definida da mesma forma que uma classe é definida, mas com a palavra-chave class substituída pela palavra-chave interface e os protótipos de função. A interface não contém variáveis ​​de dados. A interface é útil de uma forma que garante a manutenção de uma espécie de metadados para todos os métodos de um programador.
Em PHP, podemos fazer Programação Orientada a Objetos. Isso significa que podemos fazer uso de conceitos orientados a objetos, como criar classes e objetos, usar herança, etc. OOPs contém principalmente três tipos diferentes de herança. Que são: Herança Única, Herança Múltipla e Herança de Vários Níveis. Agora, o PHP suporta herança simples e de vários níveis. A herança múltipla não é diretamente suportada no PHP, mas pode ser implementada usando a Interface. Portanto, a principal razão para as interfaces em PHP é implementar a herança múltipla.
Na herança múltipla, podemos derivar uma classe filha de duas ou mais classes pais. Aqui está como podemos implementar herança múltipla em PHP.

Temos três classes diferentes, como segue:

class Circle {
    public function draw(){
        //
    }
    public function setRadius() {
        //
    }
}

class Square {
    public function draw(){
        //
    }
}

class Rectangle {
    public function draw(){
        //
    }
}

Agora, como mostrado acima, temos a mesma função em todas as três classes draw() e mais uma função na classe Circle como setRadius() . Agora temos três interfaces diferentes criadas e implementadas em nossas classes da seguinte maneira:

interface Shape {
    public function draw();
}

interface Radius {
    public function setRadius();
}

interface Main {
    public function process();
}

class Circle implements Shape, Radius, Main {
    public function draw(){
        echo "Drawing Circle...";
    }
    public function setRadius() {
        echo "Setting Radius...";
    }
    public function process() {
        $this->setRadius();
        $this->draw();
    }
}

class Square implements Shape, Main {
    public function draw(){
        echo "Drawing Square...";
    }
    public function process() {
        $this->draw();
    }
}

class Rectangle implements Shape, Main {
    public function draw(){
        echo "Drawing Rectangle...";
    }
    public function process() {
        $this->draw();
    }
}

Como mostrado acima, implementamos mais de uma interface em nossas classes. As interfaces Shape e Main são implementadas em todas as classes, mas a interface Radius é implementada apenas na classe Circle.

Então, uma quarta classe chamada DrawShape está lá, pois queremos chamar a função process() em todas as classes. A função process() é chamar todas as funções dessa classe.

class DrawShape {
    public function newShape(Main $shape) {
        return $shape->process();
    }
}

Exemplo:

<?php
  
interface Shape {
    public function draw();
}
  
interface Radius {
    public function setRadius();
}
  
interface Main {
    public function process();
}
  
class Circle implements Shape, Radius, Main {
      
    public function draw(){
        echo "Drawing Circle...";
        echo "<br>";
    }
  
    public function setRadius() {
        echo "Setting Radius...";
    }
  
    // To call all the functions in this class
    public function process() {
        $this->setRadius();
        $this->draw();
    }
  
}
  
class Square implements Shape, Main {
  
    public function draw(){
        echo "Drawing Square...";
        echo "<br>";
    }
  
    // To call all the functions in this class
    public function process() {
        $this->draw();
    }
  
}
  
class Rectangle implements Shape, Main {
  
    public function draw(){
        echo "Drawing Rectangle...";
        echo "<br>";
    }
  
    // To call all the functions in this class
    public function process() {
        $this->draw();
    }
  
}
  
class DrawShape {
  
    public function newShape(Main $shape) {
        return $shape->process();
    }
      
}
  
// To Draw Circle
$shapeCircle = new Circle();
$drawCircle = new DrawShape();
$drawCircle->newShape($shapeCircle);
  
// To Draw Square
$shapeSquare = new Square();
$drawSquare = new DrawShape();
$drawSquare->newShape($shapeSquare);
  
// To Draw Rectangle
$shapeRectangle = new Rectangle();
$drawSquare = new DrawShape();
$drawSquare->newShape($shapeRectangle);
  
?>

Saída: