Foros del Web » Programando para Internet » PHP »

Saber qué variables se cargan al hacer un require()

Estas en el tema de Saber qué variables se cargan al hacer un require() en el foro de PHP en Foros del Web. Buenas, Tengo una dudilla, ¿Hay alguna manera de saber cuales son las variables que se cargan al hacer un require de un fichero? Es decir, ...
  #1 (permalink)  
Antiguo 11/10/2008, 12:44
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Saber qué variables se cargan al hacer un require()

Buenas,

Tengo una dudilla,

¿Hay alguna manera de saber cuales son las variables que se cargan al hacer un require de un fichero?

Es decir, si yo tengo un .php con lo siguiente:

$var1 = 1;
$var2 = 2;

etc..

y lo llamo desde otro script, podría saber que esas dos variables son las que se han cargado.

Lo que quiero es hacer un require de un fichero y luego recorrer sus variables para meterlas como atributos de una clase.

Puedo leer el fichero, como si fuese uno de texto normal y parsearlo, pero buscaba algo más elegante.

Saludos.
  #2 (permalink)  
Antiguo 11/10/2008, 13:02
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Saber qué variables se cargan al jacer un require()

tal ves... con get_defined_vars

pero serian todas, no solo las del require... aunque podrías ser ingenioso, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 12/10/2008, 07:53
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Saber qué variables se cargan al jacer un require()

He estado probando con get_defined_vars. Si lo llamas dentro de una función, clase, método, etc... sólo devuelve las variables que afecten a dicho entorno (cosa que no hace el get_defined_constants, no sé por qué).

El caso es que eso me viene perfecto. Lo he dejado así:

Dentro de una clase:

Código php:
Ver original
  1. private function loadFile($auxPath) {
  2.     require_once($auxPath);
  3.     $this->strings = array();
  4.     $definedVars = get_defined_vars();
  5.     foreach ($definedVars as $key => $value) {
  6.             $this->strings[$key] = $value;         
  7.     }
  8. }

Se podría meter un if para que ignorase $auxPath, que también estaría dentro de $definedVars. E incluso comprobar que $key tiene un nombre válido (por ejemplo si queremos que sólo se carguen las variables cuyo nombre empiece de una determinada forma.

Para meterlo en una función en vez de en un método de una clase, sería casi igual:

Código php:
Ver original
  1. function loadFile($auxPath) {
  2.     require_once($auxPath);
  3.     $strings = array();
  4.     $definedVars = get_defined_vars();
  5.     foreach ($definedVars as $key => $value) {
  6.             $strings[$key] = $value;           
  7.     }
  8.     return $strings;
  9. }


Creo que esto funcionaría más o menos bien. Por supuesto habría que controlar los errores que se pudieran producir... pero eso ya es otro tema.

Gracias y un saludo!
  #4 (permalink)  
Antiguo 12/10/2008, 12:47
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Saber qué variables se cargan al hacer un require()

Pensando un poco en el tema, aunque no lo necesite para mi caso en particular, una forma de conseguir lo que propone el tema del post (Saber qué variables se cargan al hacer un require()) sería guardar el contenido de get_defined_vars() justo antes y justo después de hacer el require. De éste modo sólo habría que comparar ambos arrays, y los elementos diferentes serían las variables cargadas.

Quizás le pueda servir a alguien...
  #5 (permalink)  
Antiguo 13/10/2008, 07:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Saber qué variables se cargan al hacer un require()



genial, esto es de verdad útil....
(muy ingenioso, por cierto)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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:11.