¿Cuál es el punto de las interfaces en PHP?

Una interfaz permite a los usuarios crear programas especificando los métodos públicos que debe implementar una clase, sin involucrar las complejidades y detalles de cómo se implementan los métodos particulares. Generalmente se le conoce como el siguiente nivel de abstracción. Se parece a los métodos abstractos, a semejanza de las clases abstractas. Una interfaz se define como se define una clase, pero con la palabra clave de clase reemplazada por la palabra clave de interfaz y los prototipos de función. La interfaz no contiene variables de datos. La interfaz es útil de una manera que garantiza mantener una especie de metadatos para todos los métodos de un programador.
En PHP, podemos hacer Programación Orientada a Objetos. Eso significa que podemos hacer uso de conceptos orientados a objetos como crear clases y objetos, usar herencia, etc. Los OOP contienen principalmente tres tipos diferentes de herencia. Los cuales son: Herencia Única, Herencia Múltiple y Herencia Multinivel. Ahora, PHP admite la herencia de uno o varios niveles. La herencia múltiple no se admite directamente en PHP, pero se puede implementar mediante la interfaz. Entonces, la razón principal de las interfaces en PHP es implementar la herencia múltiple.
En la herencia múltiple, podemos derivar una clase secundaria de dos o más clases principales. Así es como podemos implementar la herencia múltiple en PHP.

Tenemos tres clases diferentes de la siguiente manera:

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

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

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

Ahora, como se muestra arriba, tenemos la misma función en las tres clases draw() y una función más en la clase Circle como setRadius() . Ahora tenemos tres interfaces diferentes creadas e implementadas en nuestras clases de la siguiente manera:

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 se muestra arriba, hemos implementado más de una interfaz en nuestras clases. Las interfaces Shape y Main se implementan en todas las clases, pero la interfaz Radius solo se implementa en la clase Circle.

Luego hay una cuarta clase llamada DrawShape , ya que queremos llamar a la función process() en todas las clases. La función process() es para llamar a todas las funciones en esa clase.

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

Ejemplo:

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

Producción:

Publicación traducida automáticamente

Artículo escrito por aakashpawar1999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *