6 ambito de las variables en php - realsoftgt/master-php GitHub Wiki
Las variables que se declaran fuera de funciones o clases se encuentran en el ámbito **global **(global scope), disponibles en cualquier parte del script.
Las funciones son bloques independientes, las variables que se definen dentro de una función tienen ámbito local (local scope) y no afectan a otras en el script global, de la misma forma que las variables globales no están disponibles dentro de las funciones:
function saludar()
{
$saludo = "Hola";
print $saludo;
}
$saludo = "Buenos dias";
saludar(); // Devuelve: Hola
print $saludo; // Devuelve: Buenos días
La ejecución del script empieza en $saludo = "Buenos días", y después llama a la función saludar(). Esta función establece $saludo a "Hola" y lo imprime, y después devuelve el control al script principal donde se imprime $saludo. Puede comprobarse que sus valores son diferentes y no se afecta el uno al otro.
Es posible emplear una variable global dentro de una función con la palabra global o con el array $GLOBALS:
// --- Ejemplo con la palabra global
$x = 2;
$y = 20;
function suma()
{
global $x, $y;
return $x + $y;
}
echo suma(); // Devuelve: 22
// --- Ejemplo con $GLOBALS
$x = 4;
$y = 21;
function otraSuma()
{
return $GLOBALS['x'] + $GLOBALS['y'];
}
echo otraSuma(); // Devuelve 25
Cuando se hace global a una variable, es lo mismo que referenciar el nombre de la misma al elemento GLOBALS en cuestión:
$x = 10;
function funcionUno(){
global $x;
$x++;
return $x;
}
function funcionDos(){
$x =& $GLOBALS['x'];
$x++;
return $x;
}
funcionUno();
funcionDos();
echo $x; // Devuelve: 12
La diferencia entre utilizar la palabra global y el array $GLOBALS se produce cuando se hacen referencias dentro de las funciones:
$x = "Soy X";
$y = "Soy Y";
function funcionUno()
{
global $x, $y;
$y =& $x;
}
function funcionDos(){
global $x;
$GLOBALS['y'] =& $x;
}
funcionUno();
echo $y; // Devuelve: Soy Y
funcionDos();
echo $y; // Devuelve: Soy X
En funcionUno() se han importado $x e $y con la palabra global y se ha referenciado $y a $x, pero esto ha ocurrido sólo dentro de la función. En funcionDos() se ha empleado $GLOBALS con $y y su valor ha permanecido referenciado después de la función.
Anterior | Siguiente |