Muy buenas, sé que va a ser mucho código e igual sabéis responderme sin necesidad de verlo todo. Tengo tres archivos php (videoclub.php, clienteVideoclup.php, testCliente.php). La idea es que videoclub tenga una clase 'Soporte' y de ella heredan 'DVD' y 'Videojuego' que son cosas que se pueden alquilar. Con todos sus parámetros.
Luego clienteVideoclub tiene la clase 'Cliente' para crear usuarios que alquilan (un máximo de tres soportes). Y luego la clase test en la que quiero hacer pruebas y que se impriman diferentes formas del programa según los datos. Pero se queda en blanco:
MUCHAS GRACIAS DE ANTEMANO! :)
testClient.php:
<?php
include ("videoclub.php");
include ("clienteVideoclub.php");
$client1 = new Cliente ("Carlos López", "CL001", false);
$peli1 = new DVD ("Los Otros", 1, 2.99, 120, "Español");
$peli2 = new DVD ("Los Vengadores", 2, 2.99, 140, "Español, inglés y francés");
$peli3 = new DVD ("El Hundimiento", 3, 2.99, 167, "Español, inglés y alemán");
$vidJu1 = new Videojuego ("FIFA 17", 4, 5.99, "Play Station 4", "Deporte", 1, 4);
$vidJu2 = new Videojuego ("Tomb Raider VII", 5, 6.99, "PC", "Aventuras", 1, 1);
$peli1->imprime_caracteristicas();
$peli3->imprime_caracteristicas();
echo '<br>Mostramos info de cliente nada más crearlo: <br>';
$client1->show_info();
echo '<br> * - - - - - - - - - - - - * <br>';
$client1->alquila_soporte($peli1); echo '<br>';
$client1->alquila_soporte($peli2); echo '<br>';
$client1->show_info(); echo '<br>';
echo '<br> * - - - - - - - - - - - - * <br>';
?>
videoclub.php
<meta charset="utf-8">
<?php
class Soporte {
public $titulo;
protected $numero;
private $precio;
function __construct($tit,$num,$precio){
$this->titulo = $tit;
$this->numero = $num;
$this->precio = $precio;
}
public function dame_precio_sin_iva(){
return $this->precio;
}
public function dame_precio_con_iva(){
return $this->precio * 1.16;
}
public function dame_numero_identificacion(){
return $this->numero;
}
public function imprime_caracteristicas(){
echo $this->titulo;
echo "<br>" . $this->precio . " (IVA no incluido)";
}
public function dame_titulo(){
return $this->titulo;
}
}
class DVD extends Soporte {
private $duracion;
private $idiomas_disponibles;
function __construct ($tit, $num, $precio, $duracion, $idiomas){
parent::__construct($tit, $num, $precio);
$this->duracion = $duracion;
$this->idiomas_disponibles = $idiomas;
}
public function dame_duracion(){
return $this->duracion;
}
public function dame_idiomas(){
return $this->idiomas_disponibles;
}
public function imprime_caracteristicas(){
echo 'Pelicula DVD<br>';
parent::imprime_caracteristicas();
echo '<br>Duración: ' . $this->dame_duracion() . ' min.';
echo '<br>Idimas: ' . $this->dame_idiomas();
}
}
class Videojuego extends Soporte{
private $consola;
private $tipo;
private $numMinJug;
private $numMaxJug;
function __construct ($tit, $num, $precio, $consola, $estilo, $min_j, $max_j){
parent::__construct($tit, $num, $precio);
$this->consola = $consola;
$this->tipo = $estilo;
$this->numMinJug = $min_j;
$this->numMaxJug = $max_j;
}
public function dame_consola(){
return $this->consola;
}
public function dame_tipo(){
return $this->tipo;
}
public function dame_jugadores(){
if($this->numMinJug == $this->numMaxJug){
if($this->numMinJug == 1){
echo 'Juego de un jugador';
} else {
echo 'Juego de ' . $this->numMinJug . ' jugadores.';
}
} else {
echo 'De ' . $this->numMinJug . ' a ' . $this->numMaxJug . ' jugadres.';
}
}
public function imprime_caracteristicas(){
echo 'Juego de ' . $this->dame_consola() . '<br>';
parent::imprime_caracteristicas();
echo '<br> Num. Jugadores: ';
$this->dame_jugadores();
echo '<br>Tipo: ' . $this->dame_tipo();
}
}
?>
clienteVideoclub.php:
<meta charset="utf-8">
<?php
include ("videoclub.php");
class Cliente {
private $user_name;
private $user_id;
private $max_rent_prd;
private $isPremium;
private $rented_products;
private $num_of_rentPrd;
function __construct ($name, $id, $premium){
$this->user_name = $name;
$this->user_id = $id;
$this->isPremium = $premium;
if($this->isPremium == true){
$this->max_rent_prd = 5;
} else {
$this->max_rent_prd = 3;
}
$this->rented_prd = array(); $this->num_of_rentPrd = 0;
for($i=0; $i<$this->max_rent_prd; $i++){
$this->rented_prd[$i] = null;
}
}
public function get_privilege(){
if ($this->isPremium == true ){
return true;
} else {
return false;
}
}
public function get_userName(){
return $user_name;
}
public function get_userID(){
return $user_id;
}
/**Este método recibe un soporte y devuelve true si está entre los alquileres del
cliente. Devuelve false en caso contrario. */
public function ha_alquilado ($soporte){
foreach ($this->rented_products as $product){
if($product->dame_numero_identificacion() ==
$soporte->dame_numero_identificacion()){
return true;
}
}
}
}
/**Este método comprueba si el cliente tiene alquilados todos los soportes
que puede alquilar de una vez */
public function is_full(){
foreach ($this->rented_products as $product){
return false;
}
}
return true;
}
/** Este método sirve para alquilar una película o juego por parte del cliente.
Recibe el soporte a alquilar y, en caso que el alquiler se pueda producir, debe
introducir el objeto soporte recibido en el array de soportes alquilados del
cliente. */
public function alquila_soporte($soporte){
if ($this->ha_alquilado($soporte)){
echo 'El cliente ya ha alguilado el soporte';
} else if ($this->is_full()) {
echo 'No puede alquilar más. Devuelva algún soporte';
} else {
foreach($this->rented_products as $product){
if ($product == null){
echo 'Ha alquilado ' . $product->dame_titulo();
$product = $soporte;
$num_of_rentPrd ++;
break;
}
}
}
}
/** Método que devuelve el soporte a caja. El soporte desaparece del array
$rented_products del cliente*/
public function devuelve_soporte($soporte){
foreach ($this->rented_products as $product){
if($soporte->dame_numero_indentificacion() ==
$product->dame_numero_identificacion()){
echo 'Devuelto: ' . $product->dame_titulo();
$product = null;
$num_of_rentPrd --;
}
}
}
/** Método que muestra toda la información disponible del cliente*/
public function show_info(){
echo '<br> Nombre: ' . $this->get_userName();
echo '<br> ID_client: ' . $this->get_userID();
if ($this->get_privilege()) {
echo "Es premium.<br>";
} else {
echo "No es premium.<br>";
}
//echo "Ha alquilado " . $num_of_rentPrd . " productos.";
foreach ($this->rented_products as $product){
if ($product = null){
echo '<br>- ...';
} else {
echo'<br>- ' . $product->dame_titulo();
}
}
}
}
?>
Me di cuenta a ojo, en la linea 115 del ultimo codigo tenes:
if ($product = null){
Estas haciendo una
asignación en lugar de una
comparación, deberia ser:
if ($product == null){
Si no te tira errores ni warnings, revisa tu codigo linea por linea buscando este tipo de cosas, que no dan error pero alterar totalmente el funcionamiento de la aplicación.
PD:($product = null) devolverá
true siempre! ;)
Me di cuenta a ojo, en la linea 115 del ultimo codigo tenes:
if ($product = null){
Estas haciendo una
asignación en lugar de una
comparación, deberia ser:
if ($product == null){
Si no te tira errores ni warnings, revisa tu codigo linea por linea buscando este tipo de cosas, que no dan error pero alterar totalmente el funcionamiento de la aplicación.
PD:($product = null) devolverá
true siempre! ;)
Gracias. Y sí. Era todo fallo mío. Eso y alguna cosa más. Me aventuré a subir el código demasiado rápido y realmente pude revisar varias cosas y encontrar más errores.
Muchas gracias por tu tiempo y revisión.