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

Mensaje Fatal error: Cannot redeclare class

Estas en el tema de Mensaje Fatal error: Cannot redeclare class en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola buenos dias a todos, bueno les comento que estoy entrando en POO con PHP y se me esta haciendo un poco complicado, y me ...
  #1 (permalink)  
Antiguo 18/06/2007, 01:48
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 8 meses
Puntos: 1
Mensaje Fatal error: Cannot redeclare class

Hola buenos dias a todos, bueno les comento que estoy entrando en POO con PHP y se me esta haciendo un poco complicado, y me esta pasando los siguiente.

1. Tengo una clase de nombre
class base_datos{
variables, constructor, funciones entre otras }
HASTA ACA TODO BIEN

2. tengo una clase class Familia{
<?
include (base_datos.php');
$bd=new base_datos();
class Familia{
variables, constructor, funciones entre otras
}
HASTA ACA TODO BIEN


?>

3. Un modulo(archivo) de nombre familia.php
familia(aca hago el mantenimiento, ingreso, consulta, modificacion y eliminacion, claro esta que en el inicio de este archivo tengo un include:

include('../Clases/Familia.php');
function ingreso{}
function modificacion{}
function eliminacion{}
)
HASTA ACA TODO BIEN

Todo Esto lo hago sin ningun problema esta clase contiene el id_fam, y descripcion , etc ;

AHORA VIENE EL ROMPEDERO DE CABEZA.

voy a ser otro mantenimiento pero ahora de subfamilia que tiene como campos (id_sub, desc_sub, id_fam, etc...)
Si te das cuenta en la tabla subfamilia grabo el id_fam para esto hago lo siguiente :

Creo la clase :
<?
include ('base_datos.php');
$bd=new base_datos();

class Sub_Familia{

variables, constructor, funciones entre otras
}

?>
Y luego creo un modulo(archivo) de nombre sub_familia.php en el cual hago el mantenimiento al igual que la familia, pero si te das cuenta tengo que llamar a la clase Familia para poder acceder al atributo id_fam y sacar todos los datos de esa tabla (Familias) y mostrarlas en un list box

archivo; sub_familia.php
<?
// al inicio llamo a la clase Familia y a la clase Sub_Familia es decir :

include('../Clases/Familia.php');
include('../Clases/Sub_Familia.php');

Aca van las functions de ingreso, consulta, modif. eliminacion, etc

y cuando lo ejecuto me sale este error

Fatal error: Cannot redeclare class base_datos in E:\WEBS\Administacion\Clases\base_datos.php on line 2

se que estoy redeclarando la clase base_datos.php 2 veces, ya que lo llamo mendiante la clase Familia y luego Sub_Familia, PERO COMO LO PUEDO HACER PARA NO DECLARAR VARIAS VECES, y segun el desarrollo de la web que estoy haciendo tengo que llamar a 3 o + clases que contengan la misma base_datos.php y siempre me saldra ese error y no podre avanzar
?>

COMO PUEDO RESOLVER ESTE PROBLEMA ???.

Todo esto lo hacia en estructurado correctamente pero al pasar a POO me estoy liando un poco, a ver si por favor me puedan echar un cable con esto.

PD. Las Clases siempre llevan la primera letra en Mayusculas y los modulo en minusculas y espero que me hayas podido entender.


Gracias y Reciban un cordial saludo.
  #2 (permalink)  
Antiguo 18/06/2007, 07:54
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
Re: Mensaje Fatal error: Cannot redeclare class

Una opción es realizar tus includes por archivo de implementación (ideal) pero si ya te acostumbraste al método en el que estas programando, cambia tus includes por include_once, o por require_once (ideal).

Saludos.
  #3 (permalink)  
Antiguo 18/06/2007, 08:05
Avatar de JuanKa  
Fecha de Ingreso: septiembre-2004
Mensajes: 468
Antigüedad: 19 años, 8 meses
Puntos: 1
Re: Mensaje Fatal error: Cannot redeclare class

Cita:
Iniciado por GatorV Ver Mensaje
Una opción es realizar tus includes por archivo de implementación (ideal) pero si ya te acostumbraste al método en el que estas programando, cambia tus includes por include_once, o por require_once (ideal).

Saludos.
Hola Amigo GatorV, si no es mucha molestia me podrias poner un ejemplo de archivos de implementacion que como tu dices es ideal ?

Estare muy agradecido

Saludos
  #4 (permalink)  
Antiguo 18/06/2007, 08:08
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
Re: Mensaje Fatal error: Cannot redeclare class

El ideal es por cada archivo que va a utilizar las clases hagas el include:
Código PHP:
include('../Clases/Familia.php');
include(
'../Clases/SubFamilia.php');
include(
'../Clases/BaseDeDatos.php');

$subFamilia = new SubFamilia(); 
Asi todos los componentes los incluyes cuando realmente los vas a utilizar.

Saludos.
  #5 (permalink)  
Antiguo 30/07/2007, 08:59
Avatar de Jossephb  
Fecha de Ingreso: marzo-2007
Ubicación: Medellin
Mensajes: 24
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Mensaje Fatal error: Cannot redeclare class

ufff, también tenía este problema, muy buena la solución.
  #6 (permalink)  
Antiguo 30/07/2007, 16:27
Avatar de chechelopez  
Fecha de Ingreso: mayo-2007
Mensajes: 18
Antigüedad: 17 años
Puntos: 0
Re: Mensaje Fatal error: Cannot redeclare class

La otra seria lo siguiente ...

Código PHP:
include_once('../Clases/BaseDeDatos.php');

class 
Familia{
...} 
de esa manera ya no declaras base de datos en otro lado.... y evitas la duplicidad de declaraciones

Saludos..
  #7 (permalink)  
Antiguo 08/09/2007, 23:31
 
Fecha de Ingreso: junio-2004
Ubicación: Villa Carlos Paz
Mensajes: 88
Antigüedad: 19 años, 11 meses
Puntos: 2
Re: Mensaje Fatal error: Cannot redeclare class

Muchas gracias por la respuesta!

Con "include_once" pude solucionar el problema.
  #8 (permalink)  
Antiguo 06/06/2008, 14:46
 
Fecha de Ingreso: junio-2008
Mensajes: 30
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Mensaje Fatal error: Cannot redeclare class

tengo el mismo problema, he leido esto pero no consigo solucionarlo, a ver si podeis hecharme una mano.

tengo un archivo llamado config.php el que contiene:
Código PHP:
include_once "class/class.conexion.php";
include_once 
"class/class.template.php"
y otro archvio header.php que contiene esto:
Código PHP:
include_once "config.php";
$tpl=new Template;
....... 
el problema es cuando llamo al al header.php me envia esto:

Fatal error: Cannot redeclare class Template in F:\xampplite\htdocs\template\class\class.template. php on line 3

en cambio si quito en el header.php el include_once "config.php"; y pongo el include_once "class/class.template.php"; me funciona perfecto pero es q yo lo quiero en el config pero si lo pongo como me funciona bien y tambien le añado el include_once "config.php"; y en este le kito el include hacia el class template poruqe ya lo tiene el header.php me vuelve a dar ese error.
  #9 (permalink)  
Antiguo 06/06/2008, 14:50
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Mensaje Fatal error: Cannot redeclare class

Puede ser que en tu clase conexion.php estes declarando otra vez template.php sin el include_once?
__________________
Saludoss
Guille
  #10 (permalink)  
Antiguo 06/06/2008, 15:12
 
Fecha de Ingreso: junio-2008
Mensajes: 30
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Mensaje Fatal error: Cannot redeclare class

no, no lo esta.
  #11 (permalink)  
Antiguo 06/06/2008, 15:38
 
Fecha de Ingreso: junio-2008
Mensajes: 30
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Mensaje Fatal error: Cannot redeclare class

vale por lo visto el problema no estaba en eso sino que estaba en otro cosa que esta en el config para los foros phpbb pero eso tambien lo necesito que puedo hacer??

esto es lo q tengo en el config.php

Código PHP:
//esto de aki es la causa de porque daba el error pero lo necesito
define('IN_PHPBB'true);
$phpbb_root_path '../forum/';
$phpEx substr(strrchr(__FILE__'.'), 1);
include(
$phpbb_root_path 'common.' $phpEx);

////////////////////////////////////////////////////////////////////////////////////

$user->session_begin();
$auth->acl($user->data);
$user->setup();


include_once 
"class/class.conexion.php"
include_once 
"class/class.template.php"

edito: vale ya lo he solucionado creo que lo que pasaba era es que habia un duplicado entre dos classes el del foro phpbb y el mio y lo que hecho ha sido cambiar el nombre de mi class de Template a PTemplate y funciona perfecto.

gracias de todas formas.
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:21.