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

[SOLUCIONADO] Clases hijas multiples

Estas en el tema de Clases hijas multiples en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, soy nuevo por aca, siempre leo pero nunca me habia registrado ni nada. Pero bueno, siempre hay una primera vez. Tengo un problema con ...
  #1 (permalink)  
Antiguo 01/05/2013, 21:46
Avatar de matandomuertos  
Fecha de Ingreso: mayo-2013
Ubicación: Kemi
Mensajes: 6
Antigüedad: 5 años, 5 meses
Puntos: 0
Pregunta Clases hijas multiples

Hola, soy nuevo por aca, siempre leo pero nunca me habia registrado ni nada. Pero bueno, siempre hay una primera vez.

Tengo un problema con mi codigo, tengo una clase que se llamaba BD (en referencia a que maneja toda la base de datos, abre la conexion, hace las consultas, la cierra, etc) y de esa clase padre salen 2: usuarios y libros (ya que estas 2 usan muchos metodos de BD).

Cada uno de estos esta en un archivo PHP distinto. BD.php no tiene ningun include, usuarios.php tiene el include de bd.php (ya que sino no puedo usarla de padre) y libros.php tambien (include bd.php).

El problema es cuando en una pagina random hago include de libros.php y usuarios.php (ya que necesito usar la clase usuarios y la clase libros). Al hacer esto me dice que estoy declarando 2 veces un objeto BD. Para ser exactos:
"Fatal error: Cannot redeclare class bd in /home/u847904966/public_html/class_bd.php on line 2".


Hago un ejemplo a medio pelo:

Archivo class_bd.php
Código:
<?php
class bd{
//cosas
}
?>
archivo class_usuario.php:
Código:
<?php
include('class_bd.php');
class usuarios extends bd{
//cosas
}
?>
archivo class_libro.php:
Código:
<?php
include('class_bd.php');
class libros extends bd{
//cosas
}
?>

archivo X.php -> el que tira el error
Código:
<?php
include('class_usuario.php');
include('class_libro.php');
//cosas
?>


Ese ultimo, al poner los 2 includes me da error. Si solo pongo uno funciona a la perfeccion, pero al poner los 2 da error (y necesito si o si usar las 2 clases).

Bueno, espero haberme expresado bien y no haber dado tantas vueltas que los confundi.

Saludos y gracias!!!
  #2 (permalink)  
Antiguo 01/05/2013, 23:22
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.875
Antigüedad: 10 años, 2 meses
Puntos: 2152
Respuesta: Clases hijas multiples

Usa include_once 'nombre-de-archivo.php'; para evitar ese problema.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 02/05/2013, 03:35
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 11 años, 6 meses
Puntos: 269
Respuesta: Clases hijas multiples

Como dice Triby, utiliza include_once...
Y también:
Cita:
y de esa clase padre salen 2: usuarios y libros (ya que estas 2 usan muchos metodos de BD).
Que usen la base de datos no significa que sean base de datos.Esas dos clases no derivan de esa clase padre.Significa que reciben la BD por el constructor, obtienen una instancia vía método estático...
  #4 (permalink)  
Antiguo 02/05/2013, 12:35
 
Fecha de Ingreso: abril-2013
Mensajes: 32
Antigüedad: 5 años, 5 meses
Puntos: 5
Respuesta: Clases hijas multiples

Lo que te esta diciendo dashtrash es que no hagas esa herencia. El libro no es una base de datos (lo es en sentido real jaja pero no aqui) ni tampoco el usuario. Si queres que libro utilice la clase base de datos genera una instancia en el constructor o bien recupera alguna instancia si es que ya la tienes. La forma mas simple es esta

Código PHP:
class usuario {
     
     protected 
$db;
     
     public function 
__construct() {
               
$this->db = new bd();
     }


de esta forma ya puedes utilizar los metodos de db dentro de usuario. un objeto puede usar muchos objetos, borrarlos, crearlos, recibirlos etc. La herencia es para casos particulares. En general se favorece la composicion por sobre la herencia.

Si queres entender mas te recomiendo que leas sobre patrones de diseño y teoria de objetos. No hace falta que te metas a fondo, pero si es importante entender lo basico.
  #5 (permalink)  
Antiguo 05/05/2013, 20:16
Avatar de matandomuertos  
Fecha de Ingreso: mayo-2013
Ubicación: Kemi
Mensajes: 6
Antigüedad: 5 años, 5 meses
Puntos: 0
Respuesta: Clases hijas multiples

Buenisimo, ya hice como me dijeron (que libro y usuario no sean herencia de base de datos) y funciono perfecto.

Muchas gracias!!!!

Etiquetas: clases, herencia, multiples, php, usuarios
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 05:49.