Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Ayuda como ordenar clases php 5

Estas en el tema de Ayuda como ordenar clases php 5 en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos, estoy empezando en php 5, aprendiendo primero la sintaxis y luego probando código. Mi consulta es la siguiente: ¿Cómo deberia separar los archivos ...
  #1 (permalink)  
Antiguo 19/05/2009, 10:32
 
Fecha de Ingreso: mayo-2009
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
Ayuda como ordenar clases php 5

Hola amigos, estoy empezando en php 5, aprendiendo primero la sintaxis y luego probando código.
Mi consulta es la siguiente: ¿Cómo deberia separar los archivos y como deberia invocar los include_once para que el siguiente sistemita de clases funcione? Porque en este codigo lo tengo todo junto en un mismo archivo php.
Mi idea es aprender una buena costumbre de como armar las clases ordenadamente y ustedes que tienen experiencia quiza me puedan dar una mano.

Bueno el codigo es el un simple ejemplo de un video club:



Código 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)"
   } 


class 
cinta_video extends soporte
   private 
$duracion

   function 
__construct($tit,$num,$precio,$duracion){ 
      
parent::__construct($tit,$num,$precio); 
      
$this->duracion $duracion
   } 

   public function 
imprime_caracteristicas(){ 
      echo 
"Película en VHS:<br>"
      
parent::imprime_caracteristicas(); 
      echo 
"<br>Duración: " $this->duracion
   } 
        



class 
dvd extends soporte
   public 
$idiomas_disponibles
   private 
$formato_pantalla

   function 
__construct($tit,$num,$precio,$idiomas,$pantalla){ 
      
parent::__construct($tit,$num,$precio); 
      
$this->idiomas_disponibles $idiomas
      
$this->formato_pantalla $pantalla


   public function 
imprime_caracteristicas(){ 
      echo 
"Película en DVD:<br>"
      
parent::imprime_caracteristicas(); 
      echo 
"<br>" $this->idiomas_disponibles
   } 


class 
juego extends soporte
   public 
$consola//nombre de la consola del juego ej: playstation 
   
private $min_num_jugadores
   private 
$max_num_jugadores

   function 
__construct($tit,$num,$precio,$consola,$min_j,$max_j){ 
      
parent::__construct($tit,$num,$precio); 
      
$this->consola $consola
      
$this->min_num_jugadores $min_j
      
$this->max_num_jugadores $max_j
   } 

   public function 
imprime_jugadores_posibles(){ 
      if (
$this->min_num_jugadores == $this->max_num_jugadores){ 
         if (
$this->min_num_jugadores==1
         echo 
"<br>Para un jugador"
         else 
         echo 
"<br>Para " $this->min_num_jugadores " jugadores"
      }else{ 
       echo 
"<br>De " $this->min_num_jugadores " a " $this->max_num_jugadores " Jugadores."
      } 
   } 

   public function 
imprime_caracteristicas(){ 
      echo 
"Juego para: " $this->consola "<br>"
      
parent::imprime_caracteristicas(); 
      echo 
"<br>" $this->imprime_jugadores_posibles(); 
   } 



class 
cliente
public 
$nombre
private 
$numero
private 
$soportes_alquilados
private 
$num_soportes_alquilados
private 
$max_alquiler_concurrente

function 
__construct($nombre,$numero,$max_alquiler_concurrente=3){ 
   
$this->nombre=$nombre
   
$this->numero=$numero
   
$this->soportes_alquilados=array(); 
   
$this->num_soportes_alquilados=0
   
$this->max_alquiler_concurrente $max_alquiler_concurrente
   
//inicializo las casillas del array de alquiler a "null" 
   //un valor "null" quiere decir que el no hay alquiler en esa casilla 
   
for ($i=0;$i<$max_alquiler_concurrente;$i++){ 
      
$this->soportes_alquilados[$i]=null
   } 


function 
dame_numero(){
return 
$this->numero;
}

function 
tiene_alquilado($soporte){ 
  for (
$i=0;$i<$this->max_alquiler_concurrente;$i++){ 
   if (!
is_null($this->soportes_alquilados[$i])){ 
    if (
$this->soportes_alquilados[$i]->dame_numero_identificacion() == $soporte->dame_numero_identificacion()){ 
     return 
true
    } 
   } 
  } 
  
//si estoy aqui es que no tiene alquilado ese soporte 
 
return false
 }
 
 function 
alquila($soporte){ 
  if (
$this->tiene_alquilado($soporte)){ 
   echo 
"<p>El cliente ya tiene alquilado el soporte <b>" $soporte->titulo "</b>"
  }elseif (
$this->num_soportes_alquilados==$this->max_alquiler_concurrente){ 
   echo 
"<p>Este cliente tiene " $this->num_soportes_alquilados " elementos alquilados. "
   echo 
"No puede alquilar más en este videoclub hasta que no devuelva algo"
  }else{ 
   
//miro en el array a ver donde tengo sitio para meter el soporte 
   
$cont 0
   while (!
is_null($this->soportes_alquilados[$cont])){ 
    
$cont++; 
   } 
   
$this->soportes_alquilados[$cont]=$soporte
   
$this->num_soportes_alquilados++; 
   echo 
"<p><b>Alquilado soporte a: </b>" $this->nombre "<br>"
   
$soporte->imprime_caracteristicas(); 
  } 


function 
devuelve($identificador_soporte){ 
  if (
$this->num_soportes_alquilados==0){ 
   echo 
"<p>Este cliente no tiene alquilado ningún elemento"
   return 
false
  } 
  
//recorro el array a ver si encuentro el soporte con identificador recibido 
  
for ($i=0;$i<$this->max_alquiler_concurrente;$i++){ 
   if (!
is_null($this->soportes_alquilados[$i])){ 
    if (
$this->soportes_alquilados[$i]->dame_numero_identificacion() == $identificador_soporte){ 
    echo 
"<p>Soporte devuelto: " $identificador_soporte
    echo 
" <b>" $this->soportes_alquilados[$i]->titulo "</b>"
     
$this->soportes_alquilados[$i]=null
     
$this->num_soportes_alquilados--; 
     return 
true
    } 
   } 
  } 
  
//si estoy aqui es que el cliente no tiene ese soporte alquilado 
  
echo "<p>No se ha podido encontrar el soporte en los alquileres de este cliente"
  return 
false


function 
lista_alquileres(){ 
  if (
$this->num_soportes_alquilados==0){ 
   echo 
"<p>Este cliente no tiene alquilado ningún elemento"
  }else{ 
   echo 
"<p><b>El cliente tiene " $this->num_soportes_alquilados " soportes alquilados</b>"
   
//recorro el array para listar los elementos que tiene alquilados 
   
for ($i=0;$i<$this->max_alquiler_concurrente;$i++){ 
    if (!
is_null($this->soportes_alquilados[$i])){ 
     echo 
"<p>"
     
$this->soportes_alquilados[$i]->imprime_caracteristicas(); 
    } 
   } 
  } 


 function 
imprime_caracteristicas(){ 
  echo 
"<p><b>Cliente " $this->numero ":</b> " $this->nombre
  echo 
"<br>Alquileres actuales: " $this->num_soportes_alquilados;


}
//instanciamos un par de objetos cliente 
$cliente1 = new cliente("Pepe"1); 
$cliente2 = new cliente("Roberto"564); 

//mostramos el numero de cada cliente creado 
echo "El identificador del cliente 1 es: " $cliente1->dame_numero(); 
echo 
"<br>El identificador del cliente 2 es: " $cliente2->dame_numero(); 

//instancio algunos soportes 
$soporte1 = new cinta_video("Los Otros"13.5"115 minutos"); 
$soporte2 = new juego("Final Fantasy"22.5"Playstation",1,1); 
$soporte3 = new dvd("Los Intocables"33"Inglés y español","16:9"); 
$soporte4 = new dvd("El Imperio Contraataca"43"Inglés y español","16:9"); 

//alquilo algunos soportes 
$cliente1->alquila($soporte1); 
$cliente1->alquila($soporte2); 
$cliente1->alquila($soporte3); 

//voy a intentar alquilar de nuevo un soporte que ya tiene alquilado 
$cliente1->alquila($soporte1); 

//el cliente tiene 3 soportes en alquiler como máximo 
//este soporte no lo va a poder alquilar 
$cliente1->alquila($soporte4); 

//este soporte no lo tiene alquilado 
$cliente1->devuelve(4); 
//devuelvo un soporte que sí que tiene alquilado 
$cliente1->devuelve(2); 
//alquilo otro soporte 
$cliente1->alquila($soporte4); 

//listo los elementos alquilados 
$cliente1->lista_alquileres(); 
Desde ya muchas gracias y cualquier ayuda me viene bien
  #2 (permalink)  
Antiguo 19/05/2009, 12:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Ayuda como ordenar clases php 5

La idea es que cada clase este en su propio archivo PHP, la estructura ahi si depende mucho de ti, de que estructura quieras darle a tu sistema, ya que depende con eso como va a funcionar el include_once ya que tienes que especificarle el path al archivo que contiene la clase.

Saludos.
  #3 (permalink)  
Antiguo 20/05/2009, 08:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 2
Antigüedad: 15 años
Puntos: 0
De acuerdo Respuesta: Ayuda como ordenar clases php 5

Gracias por la ayuda!!! Lo voy a probar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:38.