Foros del Web » Programando para Internet » PHP »

Hacer un require desde una función, y que se aplique en el ámbito global

Estas en el tema de Hacer un require desde una función, y que se aplique en el ámbito global en el foro de PHP en Foros del Web. Hola. Pues básicamente necesito lo que dice el título. Quiero hacer algo similar a lo que hace Wordpress con su función get_header(), que incluye el ...
  #1 (permalink)  
Antiguo 09/09/2012, 04:35
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 13 años, 3 meses
Puntos: 3
Hacer un require desde una función, y que se aplique en el ámbito global

Hola.

Pues básicamente necesito lo que dice el título.

Quiero hacer algo similar a lo que hace Wordpress con su función get_header(), que incluye el archivo header.php de determinado directorio. El problema es que al incluirlo desde una función, el ámbito de las variables de header.php es de de la propia función. No obstante, en wordpress eso no pasa, y estudiando el código de wp no consigo entender cómo lo hace.

Gracias, un saludo.
  #2 (permalink)  
Antiguo 09/09/2012, 07:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Hacer un require desde una función, y que se aplique en el ámbito global

Seguir los malas practicas de wp lejos esta de ser algo recomendable, de todas formas no hay mucho vuelta que darle, en algun lugar utiliza global.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 09/09/2012, 09:23
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Hacer un require desde una función, y que se aplique en el ámbito global

Hola! Gracias por responder.

Eso que dices es lo que hago actualmente, pero con eso es necesario declarar como global todas las variables que vayas a utilizar.

En wordpress no es necesario hacerlo.

Aunque ahora que me has mandado ese enlace, pienso que quizá funcionaría algo así:

Código PHP:
while ( current($_GLOBAL) )
{
   
$var =  key ($_GLOBAL);
   global $
$var;
   
next $_GLOBAL );

Aunque de esta forma las variables que declares dentro de header.php no serían globales.
  #4 (permalink)  
Antiguo 09/09/2012, 09:31
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Hacer un require desde una función, y que se aplique en el ámbito global

¿Qué quieres lograr exactamente? Me refiero a parte de lograr que sea global. Lo que sucede es que lo que pretendes hacer es una mala, malisima practica. Razones hay de sobra entre una de ellas que considero te va a pasar es que se te va a ser bien complicado a la hora de hacer debug. Porque no vas a saber en cierta manera donde se modifico una variable y te va a costar trabajo. Por lo que quieras lograr debe y estoy seguro que hay una mejor forma.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 09/09/2012, 09:47
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Hacer un require desde una función, y que se aplique en el ámbito global

En realidad lo que pretendo hacer no es algo totalmente fundamental, sí que se puede hacer de otras maneras.

Es lo siguiente: escribir la función

Código PHP:
get_header(); 
Y que sea totalmente equivalente a

Código PHP:
require ( 'DIR/AL/ARCHIVO/header.php' ); 
Por poner el mismo ejemplo que lo que hace wordpress.

Como ves, no es fundamental hacerlo así, de hecho es más sencillo y correcto hacer así

Código PHP:
require (header_dir() . 'header.php'); 
Siendo header_dir() una función que devuelva un string con la ruta a header.php.

Pero como he visto que wordpress lo hace de la primera forma, tengo curiosidad por saber cómo lo consigue.

Etiquetas: global, 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 22:17.