Ejecuto una web php, no da error, pero se queda en blanco. No muestra nada.

Iniciado por LucasHood, 24 Agosto 2016, 19:10 PM

0 Miembros y 1 Visitante están viendo este tema.

LucasHood

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:
Código (php) [Seleccionar]

<?php

include ("videoclub.php");
include ("clienteVideoclub.php");

$client1 = new Cliente ("Carlos López""CL001"false);
$peli1 = new DVD ("Los Otros"12.99120"Español");
$peli2 = new DVD ("Los Vengadores"22.99140"Español, inglés y francés");
$peli3 = new DVD ("El Hundimiento"32.99167"Español, inglés y alemán");
$vidJu1 = new Videojuego ("FIFA 17"45.99"Play Station 4""Deporte"14);
$vidJu2 = new Videojuego ("Tomb Raider VII"56.99"PC""Aventuras"11);

$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
Código (php) [Seleccionar]

<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:
Código (php) [Seleccionar]

<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(!is_null($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){
if(is_null($product)){
return false;
}
}
return true;


/** Este método sirve para alquilar una peli&#769;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();
}
}
}

}

?>


dopr

Si te soy sincero no he leido ni la mitad del código pero lo poco que he leído parece estar bien.
Prueba a hacer un try catch, a intentar imprimir algo antes de crear todos los objetos para ver si va.
Y antes de todo escribe en la primera línea:

error_reporting(E_ALL);


Saludos.
High Hopes.

[u]nsigned

Me di cuenta a ojo, en la linea 115 del ultimo codigo tenes:
Código (php) [Seleccionar]
if ($product = null){

Estas haciendo una asignación en lugar de una comparación, deberia ser:
Código (php) [Seleccionar]
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! ;)

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

LucasHood

[quote author=nsigned link=topic=456699.msg2085123#msg2085123 date=1472239796]
Me di cuenta a ojo, en la linea 115 del ultimo codigo tenes:
Código (php) [Seleccionar]
if ($product = null){

Estas haciendo una asignación en lugar de una comparación, deberia ser:
Código (php) [Seleccionar]
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! ;)
[/quote]

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.