Una vez visto gran parte de los conceptos orientados a objetos en PHP vamos a mostrar un
ejemplo que maneja objetos para gestionar un videoclub. Antes de nada, hay que decir que este
ejemplo no est completo, ni siquiera es la forma ideal de realizar una aplicacin de gestin,
pero nos sirve como ejemplo para aprender a manejar objetos.
Vamos a realizar en primer lugar un diagrama de clases en UML para representar grficamente
las clases que vamos a utilizar para gestionar los diferentes objetos. Para no alargar mucho el
ejemplo, vamos a contar con una serie de clases muy limitadas:
-La clase Videoclub: es la clase principal de nuestra aplicacin. Representa a un videoclub en el
dominio del problema y cuenta con una coleccin de clientes y productos registrados. As como
mtodos para alquilar un producto a un cliente, y registrar nuevos productos y clientes en el
videoclub.
-La clase Cliente: representa a un cliente. Cuenta con una variable que representa la coleccin
de productos alquilados.
-La clase Producto: clase abstracta que representa un producto del videoclub. No podemos
instanciar objetos Producto. Cuenta con una serie de atributos que heredarn las
subclases,nombre y precio.
-Las clases Pelicula, Cd, Juego: clases derivadas de la clase padre Producto. Representan los
diferentes productos del que dispone el videoclub. Cada producto tiene asignado un precio
diferente de alquiler. Para mostrar un ejemplo de clases abstractas, herencias y reemplazo de
mtodos, he diseado la clase Producto con un mtodo abstracto getPrecio() que debern
implementar las clases derivadas. As cada tipo de Producto contar con un
mtodo getPrecio() que devolver el precio en funcin del tipo de producto que sea. Las
peliculas devolvern 2 euros, los cds de msica devolvern 1 euro y los juegos 3 euros.
Tras esta breve descripcin de las clases del dominio de nuestra aplicacin, vamos a crear el
cdigo PHP que utilizaremos para instanciar objetos:
Clase Cliente
<?php
/* Clase que representa a un cliente en el dominio del problema */
class Cliente
{
private $nombre;
private $productosAlquilados;
public function __construct($nombre)
{
$this->nombre=$nombre;
$this->productosAlquilados=array();
}
public function getNombre()
{
return $this->nombre;
}
public function getProductosAlquilados()
{
return $this->productosAlquilados;
}
public function alquilarProducto($producto)
{
$this->productosAlquilados[]=$producto;
return true;
}
}
?>
Clase Producto
<?php
abstract class Producto
{
protected $nombre;
protected $precio;
public function getNombre()
{
return $this->nombre;
}
abstract public function getPrecio();
}
?>
Clase Pelicula
<?php
class Pelicula extends Producto
{
private $idioma;
private $duracion;
private $genero;
public function __construct($nombre,$idioma,$duracion,$genero)
{ $this->nombre = $nombre;
$this->precio = 2;
$this->idioma = $idioma;
$this->duracion = $duracion;
$this->genero=$genero;
}
public function getPrecio()
{
return $this->precio;
}
public function getIdioma()
{
return $this->precio;
}
public function getDuracion()
{
return $this->precio;
}
}
?>
Clase Cd
<?php
class Cd extends Producto
{
private $duracion;
private $genero;
public function __construct($nombre,$duracion,$genero)
{
$this->nombre = $nombre;
$this->precio = 1;
$this->genero = $genero;
$this->duracion = $duracion;
}
public function getPrecio()
{
return $this->precio;
}
public function getDuracion()
{
return $this->duracion;
}
public function getGenero()
{
return $this->Genero;
}
}
?>
Clase Juego
<?php
class Juego extends Producto
{
private $plataforma;
private $genero;
public function __construct($nombre,$plataforma,$genero)
{
$this->nombre = $nombre;
$this->precio = 3;
$this->idioma = $idioma;
$this->duracion = $duracion;
}
public function getPrecio()
{
return $this->precio;
}
public function getPlataforma()
{
return $this->plataforma;
}
public function getGenero()
{
return $this->Genero;
}
}
?>
Clase Videoclub
<?php
include_once('[Link]');
include_once('[Link]');
include_once('[Link]');
include_once('[Link]');
include_once('[Link]');
class Videoclub
{
private $nombre;
private $productos;
private $clientes;
public function __construct($nombre)
{
$this->nombre=$nombre;
$this->productos=array();
$this->clientes=array();
}
public function addProducto($producto)
{
$this->productos[]=$producto;
}
public function getProductos()
{
return $this->productos;
}
public function addCliente($cliente)
{
$this->clientes[]=$cliente;
}
public function getClientes()
{
return $this->clientes;
}
public function alquilar($cliente,$producto)
{
$cliente->alquilarProducto($producto);
}
}
?>
Ya tenemos creadas las clases que vamos a utilizar para instanciar objetos y gestionar
nuestro videoclub. Ahora realizamos un pequeo script de ejemplo que muestr el manejo de
estos objetos.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Prueba</title>
</head>
<body>
<?php
include_once('[Link]');
//Creamos un videoclub
$videoclub= new Videoclub('VideoMax');
//Creamos un nuevo cliente de nombre Francisco
$cliente=new Cliente('Francisco');
//Creamos una nueva pelicula
$pelicula=new Pelicula('El seor de los Anillos','Castellano','3
horas','Fantasa');
//Registramos el cliente y el producto en el videoclub
$videoclub->addCliente($cliente);
$videoclub->addProducto($pelicula);
//El cliente alquila la pelicula
$videoclub->alquilar($cliente, $pelicula);
//Obtenemos la lista de clientes registrados
$clientes = $videoclub->getClientes();
//Imprimimos la lista de clientes registrados
echo '<p>Lista de Clientes:</p>';
foreach($clientes as $cliente)
{
echo $cliente->getNombre().'<br />';
}
//Obtenemos la lista de productos registrados
$productos = $videoclub->getProductos();
echo '<p>Lista de Productos:</p>';
foreach($productos as $producto)
{
echo $producto->getNombre().'<br />';
}
?>
</body>
</html>