Foros del Web » Programando para Internet » PHP »

Error funciones redeclaradas

Estas en el tema de Error funciones redeclaradas en el foro de PHP en Foros del Web. Buenos días, Estoy haciendo un php que junta dos sistemas diferentes, de manera que incluyo las librerías del sistema1 y sistema2 (librerías que no puedo ...
  #1 (permalink)  
Antiguo 11/10/2011, 17:02
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Error funciones redeclaradas

Buenos días,

Estoy haciendo un php que junta dos sistemas diferentes, de manera que incluyo las librerías del sistema1 y sistema2 (librerías que no puedo modificar). Mi problema es que hay funciones con el mismo en ambas librerías y por tanto al hacer el require de la segunda me da error de función redeclarada, ¿alguna solución?

Gracias!!
  #2 (permalink)  
Antiguo 11/10/2011, 17:24
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Error funciones redeclaradas

re re declara las funciones .... ;)
  #3 (permalink)  
Antiguo 11/10/2011, 19:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Error funciones redeclaradas

Usa require_once, en lugar de require para ello.

Saludos.
  #4 (permalink)  
Antiguo 12/10/2011, 04:47
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Error funciones redeclaradas

El require_once no me vale, os explico de nuevo la estructura:

Miarchivo.php tiene dos requiere_one (uno para la librería1.php y otro para librería2.php). El problema es que ambas librerías tienen una función que se llama init. Por lo tanto al requerir el segundo, aparece un error fatal de función redeclarada y no puedo modificar ni la libreria1.php ni libreria2.php

Gracias!!!
  #5 (permalink)  
Antiguo 12/10/2011, 06:01
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 2 meses
Puntos: 81
Respuesta: Error funciones redeclaradas

Según mi opinión no hay solución, lo único que se podría hacer es modificar el nombre de la función, al menos de una, pero como dices que no puedes hacer eso, qué mas queda? No existe la magia.
  #6 (permalink)  
Antiguo 12/10/2011, 08:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Error funciones redeclaradas

Exacto, en ese caso lo mejor es que usaras POO, así puedes incluir tus librerías y mandar llamar al método init() de ambas. Pero con programación estructurada no puedes hacerlo, a fuerzas te va a marcar el error.

Saludos.
  #7 (permalink)  
Antiguo 12/10/2011, 10:09
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Error funciones redeclaradas

GatorV, puedes explicarme como importar las librerías dentro de una clase? He probado a hacer una clase para cada librería donde exista un método cargar, dentro del cual, pongo el require_once a la librería que sea, pero resulta que si dentro de una función, defino otra (que es lo que hace el require), la última pasa a ser global.... ¿alguna otra forma de hacerlo con clases?

Mil gracias a todos por vuestra colaboración.
  #8 (permalink)  
Antiguo 12/10/2011, 13:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Error funciones redeclaradas

Es por lo mismo el require no va a crear una clase mágica, tu mismo debes de crear la clase con sus funciones. No hay una forma mágica de arreglar tu problema, debes de re-hacer tu sistema para que no trabaje con archivos planos de forma estructurada si no con clases, así puedes compartir e instanciar los objetos que necesites.

Saludos.
  #9 (permalink)  
Antiguo 13/10/2011, 02:24
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Error funciones redeclaradas

Hola de nuevo,

Modificar los archivos no es una solución viable (pertenecen a otros sistemas). La última solución que me queda es ejecutarlos por separado y juntar los resultados, ¿alguna manera fácil de hacerlo? Se me ocurre con AJAX pero prefiero hacerlo en la parte del servidor para que directamente salga "cocinado" todo el HTML.

Gracias!!!!!
  #10 (permalink)  
Antiguo 13/10/2011, 09:09
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Eliminar función en tiempo de ejecución

Buenas tardes,

Tengo una clase con la siguiente estructura:

Mi clase{
función1(){
....
función1a(){
}

}
función2(){
}
}

Mi problema es que esta estructura no la puedo modificar y al definir una función dentro de otra (función1a), esta tiene alcance global. ¿Hay alguna forma de que esto no ocurra sin cambiar la estructura? Una posible forma sería destruir esa función después de utilizarla (algo así como un unset con las variables ¿es posible?

Muchas gracias!!
  #11 (permalink)  
Antiguo 13/10/2011, 09:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Eliminar función en tiempo de ejecución

Las funciones no se pueden eliminar de la memoria.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 13/10/2011, 09:24
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Eliminar función en tiempo de ejecución

OK, ya me lo imaginaba, pero ¿puedo restringir su ámbito al menos?, te cuento lo que necesito:

mi clase{
función1(){
...
subfunción(){}
}
función2(){
...
subfunción(){}
}
}

El problema es que al tomar la subvenciones como globales, no pueden recibir el mismo nombre, ¿alguna forma de poder hacerlo y que es mantenga la igualdad de nombre?

Gracias de nuevo!
  #13 (permalink)  
Antiguo 13/10/2011, 09:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Eliminar función en tiempo de ejecución

La verdad no entiendo la necesidad de declarar funciones dentro de método, se me hace un pésimo diseño y obviamente está desaconsejado.

A menos que expliques lo que tratas de hacer voy a seguir pensando que es absurdo lo que planteas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 13/10/2011, 09:37
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Eliminar función en tiempo de ejecución

Hola pateketrueke,

Te comento, la idea proviene de otro mensaje en este mismo foro, pero con otro enfoque. La idea es que esas funciones están en otros archivos (librerías externas que no puedo modificar), es decir, tengo que usar dos librerías externas en un mismo archivo, teniendo ambas librerías funciones con el mismo nombre. La cosa sería fácil si esas librerías no fueran archivos planos (es decir, no tienen estructura de clases), No sé si esto te aclara la situación?

Gracias!
  #15 (permalink)  
Antiguo 13/10/2011, 09:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Error funciones redeclaradas

He unido los temas ya que es lo mismo.

Como ya te comente más arriba, el problema es ese, sin poder tocar el código, no puedes utilizar ambas librerías en conjunto, necesitas re-estructurar todo el sistema para que use clases y no funciones planas.

Saludos.
  #16 (permalink)  
Antiguo 13/10/2011, 11:16
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Error funciones redeclaradas

Sigo investigando y he encontrado los namespaces, ¿creeis que pueden resolver mi problema?

Gracias!!
  #17 (permalink)  
Antiguo 13/10/2011, 11:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Error funciones redeclaradas

Te pueden servir pero tendrías que modificar el código, de tus librerías y creo no tienes acceso a eso o sí?

Aparte de que necesitas PHP5.3+ de manera forzosa para trabajar.
  #18 (permalink)  
Antiguo 13/10/2011, 11:51
 
Fecha de Ingreso: octubre-2011
Ubicación: No
Mensajes: 9
Antigüedad: 12 años, 6 meses
Puntos: 0
Pregunta Respuesta: Error funciones redeclaradas

Hola GatorV,

¿En qué tendría que modificar mis librerías? Mi idea es hacerme un namespace donde incluya/requiera las librerías1 y otro namespace2 donde hago lo mismo con las librerias2, ¿no debería funcionar?

Gracias por vuestra paciencia!!!
  #19 (permalink)  
Antiguo 13/10/2011, 11:53
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Error funciones redeclaradas

Cita:
Iniciado por albertohg Ver Mensaje
[...] ¿En qué tendría que modificar mis librerías? Mi idea es hacerme un namespace donde incluya/requiera las librerías1 y otro namespace2 donde hago lo mismo con las librerias2, ¿no debería funcionar? [...]
Me pregunto por qué no experimentas en lugar de seguir preguntando.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #20 (permalink)  
Antiguo 13/10/2011, 12:19
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 2 meses
Puntos: 81
Respuesta: Error funciones redeclaradas

Mira amigo, tienes un gran problema y parece que no estás del todo consiente en qué consiste. No puedes, repito, no puedes solucionar tus problemas sin modificar los nombres de las funciones que se repiten. Sólo hazlo y te encontrarás con otros problemas, tendrás que modificar los nombres de esas funciones en todos los "lugares" donde se hayan utilizado. Si lo haces, está listo, terminado, no tendrás que hacer nada más.
  #21 (permalink)  
Antiguo 13/10/2011, 14:35
 
Fecha de Ingreso: octubre-2011
Ubicación: USA
Mensajes: 166
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Error funciones redeclaradas

Lo otro que puedes hacer es utlizar una de las dos librerias y las clases que te falten de la otra libreria hacerlas tu mismo, te ahorraria la mitad del trabajo ;) saludos

Etiquetas: librerías, require, variables
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 03:16.