viernes, 6 de diciembre de 2013

La herencia en PHP - extends


Bienvenid@s, continuando con el hilo del capítulo anterior en el cual creamos la clase empleado, vamos a ver qué es la herencia en la programación.

Puedes ir al siguiente enlace para ver la clase empleado ... empleado.php

La herencia es como su propio nombre indica, heredar las características de un objeto ya definido, por ejemplo la clase "empleado" puede ser heredada por otro objeto, también llamada subclase cuando hereda las características de otro objeto. Esta subclase puede ampliar sus características y acceder a las propiedades y métodos de la clase heredada.

Para entenderlo mejor vamos a crear una subclase que heredará las propiedades y métodos de la clase "empleado", esta subclase nos permitirá definir el sueldo total del empleado, para ello le agregaremos las siguientes propiedades ... SUELDO, EXTRA y IRPF ...

SUELDO será el sueldo base 

EXTRA será la paga extra 

IRPF lo que se le descontará de hacienda

Cada una de las propiedades podrán ser cambiadas a través de sus respectivos métodos y además se agregará un nuevo método que nos devolverá la cantidad total que percibirá el empleado.

Bien, empezaremos viendo la estructura básica de una subclase a la cual llamaremos "sueldo", primeramente incluiremos el archivo "empleado.php" de la clase empleado y la heredaremos a través de la palabra reservada "extends" ...

<?php
require("empleado.php");

class sueldo extends empleado
{
function __construct()
{
$self = $this;
}
}
?>


Bien, ahora tenemos la estructura básica de la nueva subclase sueldo que hereda la clase "empleado" a través de extends. También hemos iniciado el métodos constructor, ahora agregaremos las propiedades ...

<?php
require("empleado.php");

class sueldo extends empleado
{
function __construct()
{
$self = $this;
$self -> SUELDO = 1000;
$self -> EXTRA = 100;
$self -> IRPF = 50;
}
}
?>


OK, ahora hay tres propiedades, ahora crearemos los métodos que nos permitirán modificarlas y como dije anteriormente un método llamado total(), que regresará la suma total a percibir por el empleado.

<?php
require("empleado.php");

class sueldo extends empleado
{
function __construct()
{
$self = $this;
$self -> SUELDO = 1000;
$self -> EXTRA = 100;
$self -> IRPF = 50;
}

/* MÉTODOS */
function sueldo($sueldo="")
{
if ($sueldo == null)
{
$this->SUELDO = $this->SUELDO;
}
else
{
$this->SUELDO = $sueldo;
}
return $this->SUELDO;
}

function extra($extra="")
{
if ($extra == null)
{
$this->EXTRA = $this->EXTRA;
}
else
{
$this->EXTRA = $extra;
}
return $this->EXTRA;
}

function irpf($irpf="")
{
if ($irpf == null)
{
$this->IRPF = $this->IRPF;
}
else
{
$this->IRPF = $irpf;
}
return $this->IRPF;
}

function total()
{
$total = $this->SUELDO + $this->EXTRA - $this->IRPF;
return $total;
}
/* MÉTODOS */
}
?>


Ahora ya puedes guardar la nueva subclase como sueldo.php, lo más significativo es el método total, este método no aceptará parámetros, únicamente retornará el sueldo total a percibir del empleado tras la suma de la propiedad SUMA más EXTRA menos el IRPF.

Ahora desde un nuevo archivo, por ejemplo, index.php, incluiremos sueldo.php y llamaremos a la subclase para definir el sueldo de un empleado con todos sus datos ...

<?php

require("sueldo.php");

$sueldo_empleado = new sueldo();

$nombre = $sueldo_empleado -> nombre("Fernando");
$apellidos = $sueldo_empleado -> apellidos("Torres Macías");
$edad = $sueldo_empleado -> edad(30);
$poblacion = $sueldo_empleado -> poblacion("Madrid");
$direccion = $sueldo_empleado -> direccion("Calle Zamora");
$telefono = $sueldo_empleado -> telefono("900 00 00 00");
$puesto = $sueldo_empleado -> puesto("Programador Web");
$sueldo = $sueldo_empleado->sueldo(1200);
$extra = $sueldo_empleado->extra(250);
$irpf = $sueldo_empleado->irpf(120);
$total = $sueldo_empleado->total();

echo "<p>Nombre: $nombre</p>";
echo "<p>Apellidos: $apellidos</p>";
echo "<p>Edad: $edad</p>";
echo "<p>Poblacion: $poblacion</p>";
echo "<p>Dirección: $direccion</p>";
echo "<p>Teléfono: $telefono</p>";
echo "<p>Puesto: $puesto</p>";
echo "<p>Sueldo: $sueldo €</p>";
echo "<p>Paga extra: $extra €</p>";
echo "<p>Descuento IRPF: $irpf €</p>";
echo "<p>TOTAL A PERCIBIR: $total  €</p>";

?>


Y este es el resultado final ... 






No hay comentarios: