> Manuales > Orientación a objetos con PHP

Creamos otras clases a partir de una clase padre, para continuar con nuestro ejemplo de videoclub.

La clase soporte tiene otras clases que heredan de ella y que todavía no hemos definido.

Veamos primero el código de la clase "dvd", que es muy parecido al visto para la clase cinta_video. Lo único que cambia es que ahora vamos a definir otros atributos relacionados con los DVD, como son los idiomas disponibles en el DVD y el formato de pantalla que tiene la grabación.

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; 
   } 
}
Nota: Para una explicación detallada de este código os referimos al capítulo anterior, donde se explicaba la clase cinta_video y la sobrescritura de métodos.

Por su parte, la clase juego, tendrá 3 nuevos atributos. Estos son "consola", para especificar la consola para la que está creado este juego, "min_num_jugadores", para especificar el número de jugadores mínimo y "max_num_jugadores", para especificar el máximo número de jugadores que pueden participar en el juego.

Este será el código de la clase juego.

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(); 
   } 
}

Nos fijamos en el constructor, que llama al constructor de la clase padre para inicializar algunos atributos propios de los soportes en general.

Luego nos fijamos en el método imprime_jugadores_posibles(), que muestra los jugadores permitidos. Ha sido declarada como public, para que se pueda acceder a ella desde cualquier lugar. Nos da un mensaje como "Para un jugador" o "De 1 a 2 Jugadores", dependiendo de los valores min_num_jugadores y max_num_jugadores.

Por su parte, se sobrescribe la función imprime_caracteristicas(), para mostrar todos los datos de cada juego. Primero se muestra la consola para la que se ha creado el juego. Los datos generales (propios de la clase "soporte") se muestran llamando al mismo método de la clase "parent" y el número de jugadores disponibles se muestra con una llamada al método imprime_jugadores_posibles().

Podríamos utilizar un código como el que sigue, si es que queremos comprobar que la clase funciona correctamente y que nos ofrece la salida que estábamos pensando.

$mijuego = new juego("Final Fantasy", 21, 2.5, "Playstation",1,1); 
$mijuego->imprime_caracteristicas(); 

//esta línea daría un error porque no se permite acceder a un atributo private del objeto 
//echo "<br>Jugadores: " . $mijuego->min_num_jugadores; 
//habria que crear un método para que acceda a los atributos private 
$mijuego->imprime_jugadores_posibles(); 

echo "<p>"; 
$mijuego2 = new juego("GP Motoracer", 27, 3, "Playstation II",1,2); 
echo "<b>" . $mijuego2->titulo . "</b>"; 
$mijuego2->imprime_jugadores_posibles();

Este código que utiliza la clase "juego" dará como salida:

Juego para: Playstation
Final Fantasy
2.5 (IVA no incluido)
Para un jugador

Para un jugador
GP Motoracer
De 1 a 2 Jugadores

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual