Menu
Coddy logo textTech

Herencia básica

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

La herencia permite que una clase adquiera propiedades y métodos de otra clase. En lugar de reescribir el mismo código, puedes crear una clase base con funcionalidad compartida y hacer que otras clases hereden de ella.

La clase de la que se hereda se llama clase padre (o clase base), y la clase que hereda se llama clase hija. Usas la palabra clave extends para establecer esta relación:

<?php
class Animal {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    public function speak() {
        return "$this->name makes a sound";
    }
}

class Dog extends Animal {
    public function fetch() {
        return "$this->name fetches the ball";
    }
}

$dog = new Dog("Buddy");
echo $dog->speak() . "\n";
echo $dog->fetch();

Salida:

Buddy makes a sound
Buddy fetches the ball

La clase Dog tiene acceso automáticamente a la propiedad $name, al constructor y al método speak() de Animal. También define su propio método fetch(), que solo tienen los perros.

Esto crea una jerarquía clara: todo perro es un animal, por lo que tiene sentido que Dog herede de Animal. La clase hija puede usar todo lo de la clase padre y, al mismo tiempo, añadir su propio comportamiento especializado.

Punto clave: La herencia fomenta la reutilización del código y establece relaciones lógicas entre las clases. La clase hija hereda todos los miembros públicos y protegidos de la clase padre, lo que reduce la duplicación y facilita el mantenimiento de tu código.

challenge icon

Desafío

Fácil

Construyamos un sistema de jerarquía de vehículos que demuestre cómo la herencia permite que las clases hijas compartan funcionalidades de una clase padre mientras añaden sus propios comportamientos especializados.

Organizarás tu código en tres archivos:

  • Vehicle.php: Define una clase Vehicle que sirva como clase padre para todos los vehículos. Debe tener una propiedad pública $brand y un constructor que acepte y establezca la marca. Incluye un método start() que devuelva "[brand] is starting" y un método stop() que devuelva "[brand] is stopping".
  • Motorcycle.php: Define una clase Motorcycle que extienda Vehicle. Incluye el archivo Vehicle al principio. La clase Motorcycle no necesita su propio constructor, ya que heredará el constructor de la clase padre. Añade un método wheelie() que devuelva "[brand] is doing a wheelie!". Este es un comportamiento exclusivo de las motocicletas.
  • main.php: Incluye el archivo Motorcycle, que ya incluye Vehicle. Recibirás una entrada: la marca de la motocicleta. Crea un objeto Motorcycle con esta marca. Imprime el resultado de llamar a start(), después a wheelie() y después a stop(), cada uno en su propia línea.

Observa cómo la clase Motorcycle hereda automáticamente de Vehicle la propiedad $brand, el constructor y los métodos start() y stop(). La clase hija solo necesita definir aquello que la hace única, en este caso, la capacidad de hacer un caballito. Este es el poder de la herencia: escribir la funcionalidad común una sola vez en la clase padre y permitir que las clases hijas la reutilicen mientras añaden sus propias especializaciones.

Pruébalo tú mismo

<?php
// Incluye la clase Motorcycle (que ya incluye Vehicle)
require_once 'Motorcycle.php';

// Leer la entrada
$brand = trim(fgets(STDIN));

// TODO: Crear un objeto Motorcycle con la marca

// TODO: Imprimir el resultado de start()

// TODO: Imprimir el resultado de wheelie()

// TODO: Imprimir el resultado de stop()
?>
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