Foros del Web » Programando para Internet » PHP »

Variables $_GLOBAL en una funcion

Estas en el tema de Variables $_GLOBAL en una funcion en el foro de PHP en Foros del Web. Tengo un mareo barbaro.... no se si usar $_SESSION, static, $_GLOBAL o si esta ultima matriz es $GLOBAL En mi programa hay una funcion boton_enlace ...
  #1 (permalink)  
Antiguo 19/06/2009, 18:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Exclamación Variables $_GLOBAL en una funcion

Tengo un mareo barbaro.... no se si usar $_SESSION, static, $_GLOBAL o si esta ultima matriz es $GLOBAL

En mi programa hay una funcion boton_enlace() que quiero que trabaje con variables definidas una vez en el programa (se decide un valor en una funcion y luego se debe recordar y operar con el)

De acuerdo a si una de estas variables fue asiganada o no.......cargo con include() estas lineas:

$_global ['url_asignado']= "http://www.misitio.com";
$_global ['anchor_asignado']="juancito";
$_global ['img_asignado']="";

Luego pretendo utilizar los valores de estas variables en mi funcion pero el problema es que no tiene valor dentro de la misma:

Código PHP:
<?
Function boton_enlace(){  
  if (isset(
$_global['anchor_asignado'])){
    
$enlace = new Link2Text ($_global['url_asignado'],$_global['anchor_asignado']);
  }else{
    
$enlace = new Link2Graph ($_global['url_asignado'],$_global['img_asignado']);
  }
  return 
$enlace;  // devuelve el objeto pero al imprimirse se llama al metodo magico __toString() 
}
?>
Hace meses que no programaba.......y estoy REALMENTE confundido

APRECIERIA cualquier ayuda // GRACIAS!
__________________
Salu2!
  #2 (permalink)  
Antiguo 19/06/2009, 18:57
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
De acuerdo Respuesta: Variables $_GLOBAL en una funcion

REEEMPLAZANDO los $_global por $_SESSION funciona pero sigo sin entender porque no funciona con $_GLOBAL
__________________
Salu2!
  #3 (permalink)  
Antiguo 19/06/2009, 19:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Variables $_GLOBAL en una funcion

$_global no existe... es $GLOBALS (tampoco es $_GLOBAL)


además, estas variables no persisten entre paginas...

para eso es mejor usar $_SESSION, además también son super-globales
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 19/06/2009, 20:48
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Variables $_GLOBAL en una funcion

gracias PATE
__________________
Salu2!
  #5 (permalink)  
Antiguo 19/06/2009, 22:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: Variables $_GLOBAL en una funcion

No te serviria el uso de constantes?

define('CONSTANTE', 'valor');

Y lo puedes usar en todo el script, dentro de funciones, objetos, etc.; ejemplo:

$link = CONSTANTE . "/pagina.php";
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 19/06/2009, 22:19
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Variables $_GLOBAL en una funcion

Triby: gracias...... pero sucede que el valor se define "en vuelo" y luego si es "constante"
__________________
Salu2!
  #7 (permalink)  
Antiguo 19/06/2009, 22:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 7 meses
Puntos: 2237
Respuesta: Variables $_GLOBAL en una funcion

define('CONSTANTE', $valor_al_vuelo);
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 19/06/2009, 23:01
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 7 meses
Puntos: 139
Respuesta: Variables $_GLOBAL en una funcion

Para k una variable sea visible desde la funcion tiene que declararla dentro de la funcion como global.

Código PHP:

<?php 


$url_asignado 
"http://www.misitio.com"
$anchor_asignado "juancito"
$img_asignado ""


function 
boton_enlace(){    

global 
$url_asignado$anchor_asignado,$img_asignado


  if (isset(
$anchor_asignado)){  
    
$enlace = new Link2Text ($url_asignado,$anchor_asignado);  
  }else{  
    
$enlace = new Link2Graph ($url_asignado,$img_asignado);  
  }  
  return 
$enlace;  // devuelve el objeto pero al imprimirse se llama al metodo magico __toString()   
}  

?>
No se si es lo k realmente deseas hacer.

Última edición por gjx2; 19/06/2009 a las 23:09
  #9 (permalink)  
Antiguo 19/06/2009, 23:14
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 7 meses
Puntos: 139
Respuesta: Variables $_GLOBAL en una funcion

La diferencia entre $GLOBALS y global
Es que $GLOBALS trabaja como matriz asociativa

Ejemplo

Código PHP:
<?php

$Nombre 
"Miguel";

echo 
getNombre();

function 
getNombre(){

return 
$GLOBALS["Nombre"];

}


?>
  #10 (permalink)  
Antiguo 19/06/2009, 23:51
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Respuesta: Variables $_GLOBAL en una funcion

gjx2: gracias! y a vos Triby......de nuevo grax
__________________
Salu2!
  #11 (permalink)  
Antiguo 20/06/2009, 08:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Variables $_GLOBAL en una funcion

Cita:
Iniciado por gjx2 Ver Mensaje
La diferencia entre $GLOBALS y global [...]


mmm... en realidad no hay diferencias, son exactamente lo mismo!!

Código PHP:
$GLOBALS['foo'] = 'bar';
$candy 'does';

function 
baz()
{
  global 
$foo;
  
$foo 'BAR';
  
$GLOBALS['candy'] = 'DOES';
}

echo 
"<pre>" $foo '/' $candy "</pre>";

baz();
echo 
"<pre>" $foo '/' $candy "</pre>"
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 20/06/2009, 11:24
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 7 meses
Puntos: 139
Respuesta: Variables $_GLOBAL en una funcion

pateketrueke
Gracias , se que literalmente son iguales hacen los mismo pero tiene diferente tipo de uso.

En el ejemplo que me pones haces mal uso de la funcion $GLOBALS

Código:
$GLOBALS['foo'] = 'bar'; ## No tengo que declarar a foo GLOBALS fuera de la funcion.
$candy = 'does';

function baz()
{
  global $foo;         ## Por que declarar a fuera y luego adentro :pensando: 
  $foo = 'BAR';
  $GLOBALS['candy'] = 'DOES';
}

echo "<pre>" . $foo . '/' . $candy . "</pre>";

baz();
echo "<pre>" . $foo . '/' . $candy . "</pre>";
Ese mismo codigo funciona

Código PHP:
$foo 'bar';
$candy 'does';

function 
baz()
{
  
$GLOBALS["foo"];
  
$foo 'BAR';
  
$GLOBALS['candy'] = 'DOES';
}

echo 
"<pre>" $foo '/' $candy "</pre>";

baz();
echo 
"<pre>" $foo '/' $candy "</pre>"

Lo que aclare fue que $GLOBALS la unica diferencia con global es que La primera permite matricez asociativas ejem.

Ejemplo con global

Código PHP:

$n
["agenda"]["Amigos"]["Primaria"][1] = "Miguel";

function 
baz()
{

global 
$n;
echo 
$n["agenda"]["Amigos"]["Primaria"][1];

}

baz(); 
Con el ejemplo anterior puedo hacer uso de mi matrix libremente en mi funcion como si estuviera declarada dentro.

Sin embargo si quisiera hacer lo anterior con $GLOBALS tuviera que declarar
la matriz antes de la funcion , con el ambito de global lo cual no es lo k deseo.

$GLOBALS["agenda"]["Amigos"]["Primaria"] = "Miguel";

Que piensas ?
  #13 (permalink)  
Antiguo 20/06/2009, 12:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Variables $_GLOBAL en una funcion

mmm...

Cita:
Iniciado por gjx2 Ver Mensaje
[...]

Ese mismo codigo funciona

Código PHP:
$foo 'bar';
$candy 'does';

function 
baz()
{
  
$GLOBALS["foo"];
  
$foo 'BAR';
  
$GLOBALS['candy'] = 'DOES';
}

echo 
"<pre>" $foo '/' $candy "</pre>";

baz();
echo 
"<pre>" $foo '/' $candy "</pre>"
y seguro probaste tu código antes de escribir esto???

porque yo lo acabo de hacer, y no funciona....

en efecto, el resultado correcto (mi ejemplo) es este:
Código:
bar/does
BAR/DOES
ese es el resultado que se espera...

mientras tu código imprime lo siguiente:
Código:
bar/does
bar/DOES


Cita:
Iniciado por gjx2 Ver Mensaje
[...]
Que piensas ?
(ni hablar)


--
Edito:

Código PHP:
// aqui tienes toda la razon, porque mas adelante en la funcion baz()
// utilzamos la matriz directamente... sin duda!
// ya que facilmente se puede hacer: $foo = 'bar';
// (pero lo hice para ilustrar...)
$GLOBALS['foo'] = 'bar'## No tengo que declarar a foo GLOBALS fuera de la funcion.

// * me refiero al caso del indice "candy" (que es lo que tu recalcabas bien)
$candy 'does';

function 
baz()
{
// en lo siguiente, gracias al contexto de las variables externas a la funcion
// debemos "recuperar" la variable del contexto global (tu ¿pensaste?)
// o usar la matriz $GLOBALS (igual a $candy) directamente y omitir el operador "global"
  
global $foo;         ## Por que declarar a fuera y luego adentro :pensando: 
  
$foo 'BAR';
  
$GLOBALS['candy'] = 'DOES'// * aqui lo que explicaste con $candy

tal ves te convenga leer sobre el contexto de las variables...

http://www.php.net/manual/en/languag...bles.scope.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 20/06/2009 a las 12:24
  #14 (permalink)  
Antiguo 20/06/2009, 12:39
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 7 meses
Puntos: 139
Respuesta: Variables $_GLOBAL en una funcion

Ok perdon modifico mi codigo

Código PHP:

$foo 
'bar';
$candy 'does';

function 
baz()
{
  global 
$foo,$candy;
  
$foo 'BAR';
  
$candy 'DOES';
}

echo 
"<pre>" $foo '/' $candy "</pre>";

baz();
echo 
"<pre>" $foo '/' $candy "</pre>"
Da el mismo resultado que de tu codigo , y no tengo que declarar fuera de la funcion como $GLOBALS .
  #15 (permalink)  
Antiguo 20/06/2009, 12:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: Variables $_GLOBAL en una funcion

bueno, ahora si que tiene sentido... no crees??

NOTA que yo hice mi ejemplo así, usando ambas sintaxis... para ilustrar como se comportan, etc.
__________________
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 14:04.