Menu
Coddy logo textTech

Introducción a las interfaces

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 27 de 91.

Una interfaz define un contrato que las clases deben seguir. A diferencia de las clases abstractas, que pueden contener métodos abstractos y concretos, una interfaz solo declara firmas de métodos sin ninguna implementación. Piensa en ella como una promesa: cualquier clase que implemente una interfaz garantiza que proporcionará esos métodos específicos.

Defines una interfaz utilizando la palabra clave interface:

<?php
interface Printable {
    public function print();
}

Esta interfaz declara que cualquier clase que implemente Printable debe tener un método print(). A la interfaz no le importa cómo funciona el método, solo que exista.

Aquí tienes un ejemplo sencillo que muestra la estructura básica:

<?php
interface Drivable {
    public function start();
    public function stop();
}

Observa que los métodos de una interfaz no tienen cuerpo, solo la firma terminada en punto y coma. Todos los métodos de una interfaz son implícitamente públicos, por lo que no puedes usar private ni protected.

Las interfaces son poderosas porque permiten que clases no relacionadas compartan un comportamiento común. Un Car y una Motorcycle podrían no tener nada en común en cuanto a herencia, pero ambas pueden implementar Drivable para garantizar que tengan los métodos start() y stop().

Punto clave: Una interfaz define qué métodos debe tener una clase, no cómo deben funcionar. Establece un contrato que las clases que la implementan deben cumplir.

challenge icon

Desafío

Fácil

Construyamos un sistema de mensajería sencillo que te introduzca a las interfaces. Definirás una interfaz que establece un contrato sobre cómo deben gestionarse los mensajes, sentando las bases para las clases que implementarás en la próxima lección.

Organizarás tu código en dos archivos:

  • Messageable.php: Define una interfaz llamada Messageable que declara dos firmas de métodos: compose($content) para crear un mensaje y deliver() para enviarlo. Recuerda que los métodos de una interfaz no tienen cuerpo, solo la firma terminada en punto y coma.
  • main.php: Incluye el archivo Messageable. Para verificar que tu interfaz está definida correctamente, usa la función interface_exists() de PHP para comprobar si Messageable existe. Después, usa ReflectionClass para inspeccionar tu interfaz y enumerar sus métodos. Crea una reflexión de tu interfaz, obtén sus métodos mediante getMethods() (que devuelve objetos ReflectionMethod) e imprime el getName() de cada método en su propia línea.

Tu salida debe mostrar los dos nombres de métodos que declara tu interfaz, cada uno en una línea separada, en el orden en que los definiste.

Este desafío se centra exclusivamente en definir una interfaz: el contrato que las clases futuras deberán cumplir. Estás estableciendo qué métodos deben existir, sin preocuparte por cómo funcionarán. ¡Esa implementación llegará en la próxima lección!

Pruébalo tú mismo

<?php
// Incluye el archivo de la interfaz Messageable
require_once 'Messageable.php';

// TODO: Usa interface_exists() para comprobar si existe la interfaz Messageable

// TODO: Crea un objeto ReflectionClass para la interfaz Messageable

// TODO: Obtén los métodos usando getMethods()

// TODO: Recorre los métodos e imprime el nombre de cada método en su propia línea

?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online