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.