Algunas notas sobre global y unset dentro de una función

abril 2, 2014

Unas de las preguntas del test de ejemplo de la certificación ZEND es similar a:

1:function f(){
2: $g= 20;
3: global $g;
4: echo $g;
5:}
6:$g=30;
7:f(); //

Para responderla correctamente tienes que entender que el ámbito de global no es la función entera, sino la que empieza en la linea 3. La variable local creada en la linéa 2, es sobre-escrita la línea 3, como una referencia a $GLOBALS[‘g’]. El resultado es “30”;
Parece fácil, pero ¿cuál es el resultado de?


1:function f(){
2: $g= 20;
3: global $g;
4: unset($g);
5:}
6:$g=30;
7:f();
8:echo $g;

¿un error? ¿20 ?
El resultado es 30, ya que la línea 4, no destruye la variable global $GLOBALS[‘g’] sino $g.
Si dentro de una función quieres destruir una variable global debes poner:

function foo(){
..
unset($GLOBALS['NOMBRE_DE_LA_VARIABLE_A_BORRAR']);
..
}

Y que pasa si dentro de una función creamos y destruimos una variable global

function f(){
global $g;
$g=20;
unset($g);
}
f();
echo $g;

¿el resultado es un error o 20? Global es una construcción del lenguaje que equivaldría mas o menos a:

if ( !isset($GLOBALS['g']) {
$GLOBALS['g']= NULL;
}
$g= &$GLOBALS['g'];

Así que el resultado es, 20.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: