Vamos a hacer unas clases para los productos de Ikea.
Primero tenemos una clase Producto genérico con la propiedad ‘nombre’ y ‘familia’ que se ponen en el constructor. Pongamos que son protected. Tendremos getter y setter mágicos.
De ahí vamos a derivar la clase ‘Asientos’ que incorpora la propiedad (protected) número de ‘patas’. Se pide en el constructor (junto con el nombre y la familia) y se llama al constructor padre.
De asientos derivamos la clase ‘Sillas’ y ‘Sillones’, sin nada especial.
class Producto { protected $nombre; protected $familia; function __construct(String $nombre, String $familia) { $this->nombre = $nombre; $this->familia = $familia; } function __get($name) { if (!property_exists($this, $name)) { throw new Exception("La propiedad $name no existe"); } return $this->$name; } function __set($name, $value) { if (!property_exists($this, $name)) { throw new Exception("La propiedad $name no existe"); } $this->$name = $value; } } class Asiento extends Producto{ protected $patas; function __construct(String $nombre, String $familia, int $patas) { parent::__construct($nombre, $familia); $this->patas=$patas; } } class Silla extends Asiento{ } class Sillon extends Asiento{ }