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 tanto métodos abstractos como concretos, una interfaz solo declara firmas de métodos sin ninguna implementación. Piénsalo como una promesa: cualquier clase que implemente una interfaz garantiza que proporcionará esos métodos específicos.

Se define 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 la interfaz no tienen cuerpo, solo la firma que termina con un punto y coma. Todos los métodos en una interfaz son implícitamente públicos, por lo que no puedes usar private o protected.

Las interfaces son potentes 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 ambos 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

Vamos a construir un sistema de mensajería simple que te introducirá a las interfaces. Definirás una interfaz que establece un contrato sobre cómo deben manejarse los mensajes, sentando las bases para las clases de implementación que crearás en la próxima lección.

Organizarás tu código en dos archivos:

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

Tu salida debería mostrar los dos nombres de los 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 puramente en definir una interfaz — el contrato que las futuras clases deberán cumplir. Estás estableciendo qué métodos deben existir, sin preocuparte por cómo funcionarán. ¡Esa implementación vendrá 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 la interfaz Messageable existe

// 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