45-Herencia en php




¿Qué es la herencia?

En la Programación Orientada a Objetos (OOP), la herencia permite que una clase (llamada **clase hija**) herede propiedades y métodos de otra clase (llamada **clase padre**). Esto evita la repetición de código y permite reutilizar funcionalidades ya definidas.

En PHP, la herencia se implementa con la palabra clave extends.

Ejemplo 1: Implementando herencia en PHP

En el siguiente ejemplo, la clase Strawberry hereda de la clase Fruit.

<?php
class Fruit {
    public $name;
    public $color;

    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }

    public function intro() {
        echo "The fruit is {$this->name} and the color is {$this->color}.";
    }
}

class Strawberry extends Fruit {
    public function message() {
        echo "I am a strawberry!";
    }
}

$strawberry = new Strawberry("Strawberry", "Red");
$strawberry->message();
$strawberry->intro();
?>

Salida esperada:

I am a strawberry!
The fruit is Strawberry and the color is Red.

Herencia y el modificador de acceso protegido

Como vimos anteriormente, los miembros con el modificador **protected** pueden ser accedidos dentro de la clase y sus clases derivadas.

Ejemplo 2: Uso de protected en clases heredadas

<?php
class Animal {
    protected $type = "Mammal";

    protected function getType() {
        return $this->type;
    }
}

class Dog extends Animal {
    public function showType() {
        return "This animal is a " . $this->getType();
    }
}

$dog = new Dog();
echo $dog->showType();
?>

Salida esperada:

This animal is a Mammal

Anulación de Métodos Heredados

Una clase hija puede sobrescribir los métodos heredados redefiniéndolos con el mismo nombre.

Ejemplo 3: Sobrescribir métodos heredados

<?php
class Fruit {
    public $name;
    public $color;

    public function __construct($name, $color) {
        $this->name = $name;
        $this->color = $color;
    }

    public function intro() {
        echo "The fruit is {$this->name} and the color is {$this->color}.";
    }
}

class Strawberry extends Fruit {
    public $weight;

    public function __construct($name, $color, $weight) {
        parent::__construct($name, $color);
        $this->weight = $weight;
    }

    public function intro() {
        echo "The fruit is {$this->name}, the color is {$this->color}, and the weight is {$this->weight} grams.";
    }
}

$strawberry = new Strawberry("Strawberry", "Red", 50);
$strawberry->intro();
?>

Salida esperada:

The fruit is Strawberry, the color is Red, and the weight is 50 grams.

La Palabra Clave final

La palabra clave final se usa para evitar que una clase sea heredada o que un método sea sobrescrito.

Ejemplo 4: Evitar que una clase sea heredada

<?php
final class Fruit {
    // Código interno
}

// Esto generará un error
class Strawberry extends Fruit {
    // Código interno
}
?>

Ejemplo 5: Evitar que un método sea sobrescrito

<?php
class Fruit {
    final public function intro() {
        echo "This is a fruit.";
    }
}

class Strawberry extends Fruit {
    // Esto generará un error
    public function intro() {
        echo "This is a strawberry.";
    }
}
?>

Publicar un comentario

0 Comentarios