El ámbito de una variable es el contexto dentro del que la variable está
definida. La mayor parte de las variables PHP sólo tienen un ámbito
simple. Este ámbito simple también abarca los ficheros incluidos y los
requeridos. Por ejemplo:
Aquí, la variable $a dentro del script incluido b.inc. De todas formas,
dentro de las funciones definidas por el usuario aparece un ámbito local
a la función. Cualquier variables que se use dentro de una función está,
por defecto, limitada al ámbito local de la función. Por ejemplo:
Este script no producirá salida, ya que la orden echo utiliza una versión
local de la variable $a, a la que no se ha asignado ningún valor en su
ámbito. Puede que usted note que hay una pequeña diferencia con el
lenguaje C, en el que las variables globales están disponibles
automáticamente dentro de la función a menos que sean expresamente
sobreescritas por una definición 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 función si van a ser utilizadas dentro de dicha
función. Veamos un ejemplo:
El script anterior producirá la salida "3". Al declarar $a y
$b globales dentro de la función, todas las referencias a tales variables
se referirán a la versión global. No hay límite al número de variables
globales que se pueden manipular dentro de una función.
Un segundo método para acceder a las variables desde un ámbito global es
usando el array $GLOBALS propio de PHP3. El ejemplo anterior se puede
reescribir así:
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 característica importante del ámbito de las variables es la
variable static. Una variable estática existe
sólo en el ámbito local de la función, pero no pierde su valor
cuando la ejecución del programa abandona este ámbito. Consideremos
el siguiente ejemplo:
Esta función 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
función termina la variable $a desaparece. Para hacer una función útil
para contar, que no pierda la pista del valor actual del conteo, la
variable $a debe declararse como estática:
Ahora, cada vez que se llame a la función Test(), se representará el
valor de $a y se incrementará.
Las variables estáticas también proporcionan una forma de manejar
funciones recursivas. Una función recursiva es la que se llama a sí misma.
Se debe tener cuidado al escribir una función recursiva, ya que puede
ocurrir que se llame a sí misma indefinidamente. Hay que asegurarse
de implementar una forma adecuada de terminar la recursión. La siguiente
función cuenta recursivamente hasta 10, usando la variable estática
$count para saber cuándo parar: