Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] No se puede redeclarar función

Estas en el tema de No se puede redeclarar función en el foro de PHP en Foros del Web. Tengo un problema muy extraño que llevo ya horas y no logro resolver. Tengo esta funcion incluída en un fichero "procesa.php" que me genera un ...
  #1 (permalink)  
Antiguo 10/04/2013, 10:35
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
No se puede redeclarar función

Tengo un problema muy extraño que llevo ya horas y no logro resolver. Tengo esta funcion incluída en un fichero "procesa.php" que me genera un Excel a partir de un array, es tal que así:

Código PHP:
Ver original
  1. function generaExcel($resultado, $nombre, $destino) {
  2.  
  3.     $PHPExcel = new PHPExcel();
  4.     $PHPExcel->getProperties()->setTitle($nombre); //Título del Excel
  5.  
  6.     $campo_excel = 1;
  7.     $letra = 'A';
  8.     $tipo_string = array();
  9.  
  10.     #Imprimo los títulos
  11.     foreach($resultado as $filas) {            
  12.         #Código
  13.     }
  14.  
  15.     function tipo_string($columna, $tipo_string) {
  16.         #código
  17.     }
  18.  
  19.     #Imprimo los campos
  20.     foreach($resultado AS $filas) {
  21.         #código
  22.     }
  23.  
  24.     #Ajusto ancho de las columnas al texto
  25.     for ($col = 'A'; $col != $letra; $col++) {
  26.         $PHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);      
  27.     }
  28.  
  29.     $fecha = DATE('d-m-Y H.i');
  30.    
  31.    
  32.  
  33.     //Excel 2003
  34.     $PHPExcel = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');
  35.  
  36.     //Creamos el Archivo   
  37.     $PHPExcel->save("$destino/$nombre.xls");
  38.     unset($PHPExcel);
  39. }

Al copiar y pegar se pierden las tabulaciones y queda raro.

Luego dentro de procesa.php tengo 2 includes con 2 ficheros que hacen operaciones diferentes para obtener un array con los datos y al final cada uno de ellos hace un generaExcel($resultado, $nombre, $destino).

Si los pongo por separado no hay problema, como ponga los dos me da un error de que no se puede redeclarar la funcion $tipo_string. La cual fue declarada al inicio de procesar.php sólo se carga una vez! no entiendo por qué dice que no se puede redeclarar.

He probado cambiando el nombre de la funcion para que no coincida con el nombre de la variable y me sigue dando el mismo error. Aquí un esbozo de procesa.php:

Código PHP:
Ver original
  1. #procesa.php
  2. require_once('./generaExcel.php');
  3. require_once('./procesa1php'); //Incluye una llamada a generaExcel
  4. require_once('./procesa2php'); //Incluye una llamada a generaExcel

Me da el citado error. No se puede redeclarar la función (se declara en generaExcel.php)!!!

Alguna idea? es para volverse loco
  #2 (permalink)  
Antiguo 10/04/2013, 10:49
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años
Puntos: 76
Respuesta: No se puede redeclarar función

hola

bueno el error es claro, cada vez que llamas la funcion generaExcel esta va a crear la funcion interna tipo_string , debe ser que por eso el error..

lo que te sugiero es que crear una clase , o crear la funcion tipo_string como independiente y acceder a ella dentro de la funcion generaExcel
  #3 (permalink)  
Antiguo 10/04/2013, 10:49
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: No se puede redeclarar función

Me acabo dar cuenta, claro, la función la estoy declarando dentro de la función, por lo tanto cada vez que la llamo la estoy volviendo a crear.

Lo solucioné con un function_exists ya que quiero que la funcion vaya dentro de esa función.

El problema es que antes era una clase y luego pasé la clase a función y claro, me quedó esa función ahí dentro pues antes era un método.

En fin. Saludos!

Vaya, justo en el momento en que lo solucioné. Muchas gracias de todas formas.
  #4 (permalink)  
Antiguo 10/04/2013, 10:54
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No se puede redeclarar función

Como regla general todas las funciones deberían ser creadas en el mismo contexto global, no existe ningún beneficio al declarar una función dentro de otra.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: Ninguno
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 17:51.