¿Cuándo necesitamos interfaces en PHP?

Las interfaces son definiciones de las API públicas que las clases (que implementan una interfaz) deben implementar. También se le conoce como contratos ya que una interfaz permite especificar una lista de métodos que debe implementar una clase. La definición de interfaz es similar a la definición de clase, simplemente cambiando la clase de palabra clave a interfaz.
Ejemplo:
 

php

<?php
interface man {
 
   // List of public methods
 
}

Las interfaces pueden contener métodos y/o constantes, pero no atributos. Las constantes de interfaz tienen las mismas restricciones que las constantes de clase. Los métodos de interfaz son implícitamente abstractos.
Ejemplo:
 

php

<?php
 
interface IMyInterface {
    const INTERFACE_CONST_1 = 1;
    const INTERFACE_CONST_2 = 'a string';
   
    public function method_1();
    public function method_2();
}
?>

Cualquier clase que necesite implementar una interfaz debe hacerlo usando la palabra clave implements. Una sola clase puede implementar más de una interfaz a la vez.
 

php

// Function to Implements more than one
// interface by single class.
  
class MyClass implements IMyInterface {
  
    public function method_1() {
  
        // method_1  implementation
    }
 
    public function method_2() {
  
        // method_2 implementation
    }
}

Puntos interesantes: 

  • Una clase no puede implementar dos interfaces que tengan el mismo nombre de método porque terminaría con la ambigüedad del método.
  • Al igual que las clases, es posible establecer una relación de herencia entre interfaces utilizando la misma palabra clave «extiende». 
    Ejemplo: 
     

php

interface Foo {
 
}
interface Bar {
 
}
interface Bass extends Foo, Bar {
 
}

A continuación se muestra un ejemplo completo que muestra cómo funcionan las interfaces. 
Ejemplo: 
 

php

<?php
 
// PHP program to Implement interface.
  
// Define a new Interface for all 'shapes'
// to inherit
interface Shape {
   
    // Define the methods required for
    // classes to implement
    public function getColor();
    public function setColor($color);   
     
    // Interfaces can't define common
    // functions so we'll just define a
    // method for all implementations to
    // define
    public function describe();
}
 
// Define a new 'Triangle' class that
// inherits from the 'Shape' interface
  
class Triangle implements Shape {
   
    private $color = null;
     
    // Define the required methods defined
    // in the abstractclass 'Shape'
    public function getColor() {
        return $this->color;
    }  
   
    public function setColor($color) {
        $this->color = $color;
    }  
   
    public function describe() {
        return sprintf("GeeksforGeeks %s %s\n",
            $this->getColor(), get_class($this));
    }  
}
 
$triangle = new Triangle();
 
// Set the color
$triangle->setColor('green');
 
// Print out the value of the describe common
// method provided by the abstract class will
// print out "I am an Orange Triangle"
print $triangle->describe();
?>

Producción: 
 

GeeksforGeeks green Triangle

Importancia de usar Interfaces: 
 

  • La interfaz proporciona una estructura base/raíz flexible que no se obtiene con las clases.
  • Al implementar la interfaz, la persona que llama al objeto debe preocuparse solo por la interfaz del objeto, no por las implementaciones de los métodos del objeto.
  • La interfaz permite que las clases no relacionadas implementen el mismo conjunto de métodos independientemente de sus posiciones en la jerarquía de herencia de clases.
  • La interfaz le permite modelar la herencia múltiple.

Publicación traducida automáticamente

Artículo escrito por Samdare B 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 *