variables

tgp
06 de Enero del 2005
Tengo un problema con un script pero para resolverlo creo que tengo que dejar en bien en claro el uso de variables en php, este script funcionaba bien hasta que me di cuenta de que mi php.ini tenia register_globals = on y entonces lo pase a off, entoces necesito comprender el uso de variables:

$variable = valor; // varible local que funciona solo dentro de un script o solo dentro de una funcion

$_SESSION['variable'] = valor; // variable de sesion que funciona a lo largo de toda la sesion o en varios scripts, ¿es necesario registrar esa variable de sesion con SESSION_REGISTER('variable') antes de asignarle el valor?

session_unregister('variable'); // con esta funcion eliminamos el valor de la varible $_SESSION['variable'] y ya no esta disponible durante toda la sesion...¿Se puede recuperar su valor en algun instante?

$_POST['variable'] = valor; // varible que viene de un formulario y puede ser utilizada en varios scripts o funciones

$_GET['variable'] = valor; // variable que viene de un link y puede ser utilizada solo en el script al que se dirige y dentro de las funciones de ese script

GLOBALS["variable"] = valor; // variable semejante a $_session['varible'] que puede ser utilizada en varios scripts o funciones... pero ¿Se puede utilizar si register_globlas = off? y ¿Que diferencia existe en comparacion con global $variable?, ¿GLOBALS Y $_SESSION se pueden utilizar en el mismo script y que diferencia hay entre utilizar una o la otra?


el problema que tengo es que en mi script habian unas variables asignadas con GLOBALS y funcionaba bien pero cuando cambie a register_globals = off, estas variables pierden su valor y no estoy seguro si pasarlas a $_SESSION.

Gracias espero que lo comprendan pero creo que a mas de uno en el foro a tenido dudas con las variables en cualquier momento.

espero sus respuestas

Saludos

eth0
06 de Enero del 2005
Vayamos por partes:

<<$_SESSION['variable'] = valor; // variable de sesion que funciona a lo largo de toda la sesion o en varios scripts, ¿es necesario registrar esa variable de sesion con SESSION_REGISTER('variable') antes de asignarle el valor?>>

La forma de trabajar con sesiones cambió hace unas cuantas versiones. Antes se utilizaban las funciones session_register y session_unregister. Ahora sólo hay que usar el array superglobal $_SESSION. Para registrar un valor en la sesión:

$_SESSION['clave'] = valor;

Para desregistrarlo:

unset($_SESSION['clave']);

No es posible recuperar el valor de una variable destruida ni de un valor de la sesión desregistrado.

<<$_POST['variable'] = valor; // varible que viene de un formulario y puede ser utilizada en varios scripts o funciones
$_GET['variable'] = valor; // variable que viene de un link y puede ser utilizada solo en el script al que se dirige y dentro de las funciones de ese script>>

Esos son los dos arrays superglobales que debes usar siempre, tengas activado el register_globals o no. Así tus scripts serán más portables porque no dependerán de tener register_globals activado. Además te asegurarás de que nadie te sobreescribe los campos de formulario.

<<GLOBALS["variable"] = valor; // variable semejante a $_session['varible'] que puede ser utilizada en varios scripts o funciones... pero ¿Se puede utilizar si register_globlas = off? y ¿Que diferencia existe en comparacion con global $variable?, ¿GLOBALS Y $_SESSION se pueden utilizar en el mismo script y que diferencia hay entre utilizar una o la otra?>>

El array GLOBALS contiene referencias a las variables globales del script actual, es decir, aquellas definidas fuera de las funciones del script que se está ejecutando.

Para usar una variable global en una función necesitas hacer una de dos cosas: o acceder a ella usando GLOBALS['variable'] o declararla usando global $variable. Las dos formas consiguen lo mismo.

Usar el array GLOBALS no tiene _nada_ que ver con tener register_globals activado o no. La opción register_globals convierte todos los parámetros pasados al script mediante GET y POST en variables globales del script, dando preferencia a los parámetros GET. Sin embargo, tener register_globals desactivado no te impide usar GLOBALS; simplemente no podrás acceder a esos parámetros usando GLOBALS.

La diferencia entre GLOBALS y _SESSION es muy sencilla: GLOBALS sólo te da acceso a las variables definidas fuera de las funciones que tenga tu script, pero obviamente sólo funciona con el script actual. _SESSION sirve para pasar valores entre scripts.

<<el problema que tengo es que en mi script habian unas variables asignadas con GLOBALS y funcionaba bien pero cuando cambie a register_globals = off, estas variables pierden su valor y no estoy seguro si pasarlas a $_SESSION.>>

Si aprovechas el register_globals activado para acceder a los datos GET o POST directamente, al desactivarlo no podrás hacerlo más. Por eso te aconsejo que uses SIEMPRE los arrays $_GET y $_POST.