Foros del Web » Programando para Internet » PHP »

Funcion redeclarada

Estas en el tema de Funcion redeclarada en el foro de PHP en Foros del Web. Hola a todos, Estoy trabajando en una aplicación que realiza consultas en diversas bases de datos. En función de los requerimentos del usuario, la aplicación ...
  #1 (permalink)  
Antiguo 18/12/2008, 06:14
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Funcion redeclarada

Hola a todos,

Estoy trabajando en una aplicación que realiza consultas en diversas bases de datos. En función de los requerimentos del usuario, la aplicación construye una consulta en xml. Hasta aquí todo bien.

Después esa consulta es enviada a los servidores en los que se encuentran dichas bases de datos, en donde mediante un traductor se traduce el xml al lenguaje natural de la base de datos(sql en la mayoría de los casos), y se procesa la consulta.

Para conseguir esto he construido un método llamado traductor() en el que se traduce la consulta. Existe un traductor para cada base de datos. Aunque el código de traductor() es el mismo en todos los casos.

El problema es el siguiente:

Para enviar la consulta a todas las bds, hago un for que recorre un array en donde se encuentran las diferentes rutas de las bases de datos.
for(..)
{
$ruta="rutadecadabasededatos/phpdondeseencuentralafunciontraductor.php";
include_once($ruta") y
llamo a la función traductor,
traductor($parametros);

}

En la segunda vuelta del for el sistema me dice que la función traductor($parametros) está siendo redeclarada, aunque realmente los ficheros que incluyen esa función se encuentran en directorios diferentes.

¿Alguien tiene alguna solución?¿Me gustaría ver si puedo llamar al método tal y como se hace en java o poder especificarle la ruta del fichero?

Si no se ha entendido bien el problema, por favor hacedmelo saber.

Un saludo
  #2 (permalink)  
Antiguo 18/12/2008, 06:19
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Funcion redeclarada

tan solo has el include antes del for

...

(piensa esto, incluyes el mismo script en el ciclo... ¿esta bien?)

ahora, es natural que no se puede declarar mas de una ves el mismo nombre de función... ¿¿es necesario eso???

¿¿es exactamente la misma función??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/12/2008, 06:37
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion redeclarada

Hola pateketrueke, gracias por tu interés.

El include debe de ir dentro del for, ya que se por cada base de datos a la que se le envía la consulta se necesita incluir su fichero. Cada fichero se encuentra en una ruta diferente.

Ej:
Para la base de datos a:../ProyectoBDa/paginatraductor.php
Para la base de datos b:../ProyectoBDb/paginatraductor.php

Dentro de cada página está el método traductor que es exactamente =en ambos casos.

El método traductor() que incluye dicho fichero es igual para todas las bases de datos. Dicho esto, ya sé que es preferible traducir primero la consulta y luego enviarla a cada base de datos, el problema de esto sería que mi diseño debería ser modificado, y eso quiero evitarlo si es posible.

Un saludo
  #4 (permalink)  
Antiguo 18/12/2008, 09:32
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: Funcion redeclarada

Tema trasladado a PHP General.

Lo que debes de hacer en dado caso es mejor un patrón de diseño orientado a objetos en el que puedas cargar dinamicamente una instancia de la clase y llamar al método traductor de esa clase, ya que con funciones sueltas no lo vas a poder hacer a menos que llames por ejemplo a la función traductor_algunnombre y la construyas dinamicamente en el codigo PHP y la llames usando call_user_func().

Saludos.
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:06.