Menu
Coddy logo textTech

Implementación de interfaces

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

Ahora que entiendes qué son las interfaces, veamos cómo implementarlas realmente. Una clase implementa una interfaz mediante la palabra clave implements y debe proporcionar implementaciones concretas para todos los métodos declarados en esa interfaz.

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

class Document implements Printable {
    private $content;
    
    public function __construct($content) {
        $this->content = $content;
    }
    
    public function print() {
        return "Printing: " . $this->content;
    }
}

$doc = new Document("Hello World");
echo $doc->print();

Salida:

Printing: Hello World

La clase Document implementa Printable al proporcionar su propia versión del método print(). Si olvidas implementar un método requerido, PHP generará un error fatal.

Diferentes clases pueden implementar la misma interfaz a su manera:

<?php
class Invoice implements Printable {
    private $amount;
    
    public function __construct($amount) {
        $this->amount = $amount;
    }
    
    public function print() {
        return "Invoice Total: $" . $this->amount;
    }
}

$invoice = new Invoice(150);
echo $invoice->print();

Salida:

Invoice Total: $150

Tanto Document como Invoice cumplen el contrato Printable, pero cada uno gestiona la impresión de forma diferente según su propósito.

Punto clave: Usa implements para conectar una clase a una interfaz, después define todos los métodos requeridos. Cada clase que implementa proporciona su propia lógica y garantiza que existan las mismas firmas de método.

challenge icon

Desafío

Fácil

Construyamos un sistema de mensajería que demuestre cómo diferentes clases pueden implementar la misma interfaz de sus propias maneras únicas.

Crearás tres archivos que funcionan conjuntamente para gestionar diferentes tipos de mensajes:

  • Messageable.php: Define la interfaz Messageable con dos firmas de método: compose($content) y deliver(). Esta interfaz establece el contrato que deben seguir todos los tipos de mensajes.
  • Email.php: Crea una clase Email que implemente Messageable. Incluye el archivo de la interfaz al principio. La clase debe tener una propiedad privada $recipient y una propiedad privada $body. El constructor acepta la dirección del destinatario. Implementa compose($content) para almacenar el contenido en $body y devolver "Email composed". Implementa deliver() para devolver "Email to [recipient]: [body]".
  • SMS.php: Crea una clase SMS que también implemente Messageable. Incluye el archivo de la interfaz al principio. La clase debe tener una propiedad privada $phoneNumber y una propiedad privada $text. El constructor acepta el número de teléfono. Implementa compose($content) para almacenar el contenido en $text y devolver "SMS composed". Implementa deliver() para devolver "SMS to [phoneNumber]: [text]".

En main.php, incluye los archivos de Email y SMS. Recibirás tres entradas: una dirección de correo electrónico, un número de teléfono y el contenido de un mensaje. Crea un objeto Email con la dirección de correo electrónico y un objeto SMS con el número de teléfono. Llama a compose() con el contenido del mensaje en ambos objetos, mostrando cada resultado en su propia línea. Después, llama a deliver() en ambos objetos, mostrando cada resultado en su propia línea. El orden debe ser: composición del correo electrónico, composición del SMS, entrega del correo electrónico y entrega del SMS.

Ambas clases cumplen el mismo contrato Messageable, pero cada una gestiona la composición y la entrega de mensajes según su propio propósito: los correos electrónicos muestran la dirección del destinatario, mientras que los mensajes SMS muestran el número de teléfono.

Pruébalo tú mismo

<?php
require_once 'Email.php';
require_once 'SMS.php';

// Leer entradas
$emailAddress = trim(fgets(STDIN));
$phoneNumber = trim(fgets(STDIN));
$messageContent = trim(fgets(STDIN));

// TODO: Crea un objeto Email con la dirección de correo electrónico

// TODO: Crea un objeto SMS con el número de teléfono

// TODO: Llama a compose() en ambos objetos e imprime los resultados
// Order: email compose, then SMS compose

// TODO: Llama a deliver() en ambos objetos e imprime los resultados
// Orden: email deliver, luego SMS deliver
?>
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