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 volver a escribir 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. Se utiliza 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 los perros tienen.

Esto crea una jerarquía clara: cada 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 mientras añade su propio comportamiento especializado.

Punto clave: La herencia promueve la reutilización de código y establece relaciones lógicas entre las clases. La clase hija hereda todos los miembros públicos y protegidos del padre, reduciendo la duplicación y haciendo que su código sea más fácil de mantener.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de jerarquía de vehículos que demuestre cómo la herencia permite que las clases hijas compartan la funcionalidad 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 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 de Vehicle. Incluye el archivo Vehicle al principio. La clase Motorcycle no necesita su propio constructor ya que heredará el constructor del padre. Añade un método wheelie() que devuelva "[brand] is doing a wheelie!" — este es un comportamiento único de las motocicletas.
  • main.php — Incluye el archivo Motorcycle (que ya incluye a Vehicle). Recibirás una entrada: la marca de la motocicleta. Crea un objeto Motorcycle con esta marca. Imprime el resultado de llamar a start(), luego a wheelie(), y después a stop(), cada uno en su propia línea.

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

Hoja de referencia

La herencia permite que una clase adquiera propiedades y métodos de otra clase utilizando la palabra clave extends. La clase de la que se hereda se llama clase padre (o clase base), y la clase que hereda se llama clase hija.

<?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(); // Buddy hace un sonido
echo $dog->fetch(); // Buddy trae la pelota

La clase hija hereda todos los miembros públicos y protegidos del padre, incluyendo propiedades, constructores y métodos. La hija también puede añadir sus propios métodos y propiedades especializados.

La herencia promueve la reutilización de código y establece relaciones lógicas entre clases, reduciendo la duplicación y facilitando el mantenimiento del código.

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