Menu
Coddy logo textTech

Implementación de múltiples interfaces

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

A diferencia de la herencia, donde una clase solo puede extender una clase principal, PHP permite que una clase implemente varias interfaces. Esto te da la flexibilidad de combinar diferentes contratos, haciendo que tus clases sean más versátiles.

Para Implementar múltiples interfaces, sepáralas con comas después de la palabra clave implements:

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

interface Savable {
    public function save();
}

class Report implements Printable, Savable {
    private $title;
    
    public function __construct($title) {
        $this->title = $title;
    }
    
    public function print() {
        return "Printing: " . $this->title;
    }
    
    public function save() {
        return "Saving: " . $this->title;
    }
}

$report = new Report("Sales Report");
echo $report->print() . "\n";
echo $report->save();

Salida:

Printing: Sales Report
Saving: Sales Report

La clase Report cumple ambos contratos al implementar todos los methods de Printable y Savable. Debes proporcionar implementaciones para cada method declarado en cada interfaz.

Este enfoque es potente porque te permite crear clases que cumplen múltiples requisitos sin las limitaciones de la herencia única. Una clase puede ser imprimible, guardable, exportable y mucho más, todo al mismo tiempo.

Punto clave: Usa comas para implementar varias interfaces. Tu clase debe proporcionar implementaciones concretas para todos los métodos de cada interfaz que implemente.

challenge icon

Desafío

Fácil

Construyamos un sistema de archivos multimedia que demuestre cómo una sola clase puede implementar varias interfaces para obtener distintas capacidades.

Crearás cuatro archivos que funcionan conjuntamente para gestionar archivos multimedia que se pueden reproducir y compartir:

  • Playable.php: Define una interfaz Playable con una única firma de método: play(). Este contrato garantiza que cualquier contenido multimedia reproducible pueda iniciarse.
  • Shareable.php: Define una interfaz Shareable con una única firma de método: share($platform). Este contrato garantiza que cualquier contenido que se pueda compartir pueda distribuirse en distintas plataformas.
  • Video.php: Crea una clase Video que implemente tanto Playable como Shareable. Incluye ambos archivos de interfaz al principio. La clase debe tener una propiedad privada $title y una propiedad privada $duration (en minutos). El constructor acepta el título y la duración. Implementa play() para devolver "Playing video: [title] ([duration] min)". Implementa share($platform) para devolver "Sharing [title] on [platform]".
  • main.php: Incluye el archivo Video. Recibirás tres entradas: el título del video, la duración (como una cadena que se debe convertir en un entero) y el nombre de una plataforma. Crea un objeto Video con el título y la duración. Imprime el resultado de llamar a play() en la primera línea; después, imprime el resultado de llamar a share() con la plataforma en la segunda línea.

Tu clase Video cumple simultáneamente dos contratos independientes. Se puede reproducir como cualquier contenido multimedia y se puede compartir en plataformas sociales. Este es el poder de implementar varias interfaces: una sola clase obtiene capacidades de distintas fuentes sin estar limitada a una única cadena de herencia.

Pruébalo tú mismo

<?php
// Incluir el archivo Video
require_once 'Video.php';

// Leer entradas
$title = trim(fgets(STDIN));
$duration = intval(trim(fgets(STDIN)));
$platform = trim(fgets(STDIN));

// TODO: Crear un objeto Video con el título y la duración

// TODO: Imprimir el resultado de llamar a play() en la primera línea

// TODO: Imprimir el resultado de llamar a share() con la plataforma en la segunda 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