gratiszona

Ambito de las variables

El ambito de una variable es el contexto dentro del que la variable esta definida. La mayor parte de las variables PHP solo
tienen un ambito simple. Este ambito simple tambien abarca los ficheros incluidos y los requeridos. Por ejemplo:
$a = 1;
include "b.inc";

Aqui, la variable $a dentro del script incluido b.inc. De todas formas, dentro de las funciones definidas por el usuario
aparece un ambito local a la funcion. Cualquier variables que se use dentro de una funcion esta, por defecto, limitada al
ambito local de la funcion. Por ejemplo:
$a = 1; /* ambito global */
Function Test () {
echo $a; /* referencia a una variable de ambito local */
}
Test ();

Este script no producira salida, ya que la orden echo utiliza una version local de la variable $a, a la que no se ha asignado
ningun valor en su ambito. Puede que usted note que hay una pequeña diferencia con el lenguaje C, en el que las variables
globales estan disponibles automaticamente dentro de la funcion a menos que sean expresamente sobreescritas por una
definicion local. Esto puede causar algunos problemas, ya que la gente puede cambiar variables globales inadvertidamente.
En PHP, las variables globales deben ser declaradas globales dentro de la funcion si van a ser utilizadas dentro de dicha
funcion. Veamos un ejemplo:
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;

El script anterior producira la salida "3". Al declarar $a y $b globales dentro de la funcion, todas las referencias a tales
variables se referiran a la version global. No hay limite al numero de variables globales que se pueden manipular dentro de
una funcion.
Un segundo metodo para acceder a las variables desde un ambito global es usando el array $GLOBALS propio de PHP3.
El ejemplo anterior se puede reescribir asi:
$a = 1;
$b = 2;
Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum ();
echo $b;

El array $GLOBALS es un array asociativo con el nombre de la variable global como clave y los contenidos de dicha
variable como el valor del elemento del array.
Otra caracteristica importante del ambito de las variables es la variable static. Una variable estatica existe solo en el ambito
local de la funcion, pero no pierde su valor cuando la ejecucion del programa abandona este ambito. Consideremos el
siguiente ejemplo:
Function Test () {
$a = 0;
echo $a;
$a++;
}

Esta funcion tiene poca utilidad ya que cada vez que es llamada asigna a $a el valor 0 y representa un "0". La sentencia
$a++, que incrementa la variable, no sirve para nada, ya que en cuanto la funcion termina la variable $a desaparece. Para
hacer una funcion util para contar, que no pierda la pista del valor actual del conteo, la variable $a debe declararse como
estatica:
Function Test () {
static $a = 0;
echo $a;
$a++;
}

Ahora, cada vez que se llame a la funcion Test(), se representara el valor de $a y se incrementara.
Las variables estaticas tambien proporcionan una forma de manejar funciones recursivas. Una funcion recursiva es la que
se llama a si misma. Se debe tener cuidado al escribir una funcion recursiva, ya que puede ocurrir que se llame a si misma
indefinidamente. Hay que asegurarse de implementar una forma adecuada de terminar la recursion. La siguiente funcion
cuenta recursivamente hasta 10, usando la variable estatica $count para saber cuando parar:
Function Test () {
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Test ();
}
$count-;
}

Anterior: variables en php
Siguiente: variables externas a php