Actualizado el 14-01-2007
versión para imprimir
Variables
Alcance de las variables
El alcance de una variable (scope en inglés) determina desde que porción de código PHP dicha variable es accesible. Una variable definida en el cuerpo del script (es decir fuera de una function o class) tiene un alcance global, y puede ser accedida por el script durante cualquier momento de su ejecución. Una variable dentro de una función no está disponible al resto del programa, externo a dicha función, y por ello tiene un alcance local; de la misma manera, las variables definidas fuera de una función tampoco pueden ser accedidas desde dentro de la función.
<?php
function mifuncion() {
echo $pais;
}
$pais = "España";
mifuncion();
echo $pais;
?>
Uno podría esperar al ejecutar este código que la variable $pais (su valor,
España), fuera volcado dos veces a la pantalla. Sin embargo si nos tomamos la
molestia de comprobarlo veremos que solo se produce un volcado.
La razón
es que la variable $pais dentro de la función es considerada como una variable
distinta y totalmente independiente de la variable $pais externa a la funcion.
Las operaciones con variables dentro de una función no afectan a lo que ocurre
fuera de la misma, incluso aunque existan variables locales y globales con el
mismo nombre.
Por eso se dice que el alcance de la variable dentro de la
función es local
De hecho en el ejemplo anterior se produce el doble volcado
de la variable $pais, pero su contenido es diferente, y solo se ha definido el
valor de la variable externa.
<?php
function mifuncion() {
$pais = "Alemania";
echo "\$pais dentro de la funcion vale ".$pais;
}
mifuncion(); // $pais dentro de la funcion vale Alemania
$pais = "España";
echo "<br>";
echo "\$pais fuera de la funcion vale ".$pais;
// $pais fuera de la función vale España
?>
La declaración Global
Mediante una declaración de variables globales, dentro de una función, permitimos que dicha función pueda acceder a variables externas a la misma:
<?php
function mifuncion() {
global $pais;
echo $pais;
}
$pais = "España";
mifuncion();
echo $pais;
?>
Mediante el uso de la declaración global de la variable dentro de la función, instruimos a PHP de que no ha de crear una nueva variable local, sino que va a utilizar en la función el valor de la variable externa, con el mismo alcance que las variables externas. El resultado es que se volcará el contenido de la variable (España) dos veces, una en la ejecución normal del script y otra al ejecutarse la función llamada desde el script.
variables estáticas
Normalmente las variables declaradas dentro de una función nacen (se inicializan) cuando la función es llamada, y se borran (mueren) cuando se sale de la función. Observa el siguiente ejemplo:
<?php
Function Contador () {
$a = 0;
echo $a;
$a++; //aumentamos en uno el valor de a
}
?>
Cada vez que llamamos a esta función (típico contador) se asigna a $a el valor 0 y se vuelca a pantalla "0". La sentencia $a++, que a continuación incrementa la variable, no serviría de nada, ya que en cuanto la función termina la variable $a desaparece, y si volvemos a llamar la función, $a se inicializa de nuevo con valor "0".
Para hacer una función útil para contar, la variable $a debe declararse como estática. 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:
<?php
Function Contador () {
static $a = 0;
echo $a;
$a++; //aumentamos en uno el valor de a
}
?>
Ahora, cada vez que llamamos a la función Contador(), se volcará en pantalla el valor de $a y se incrementará, conservando este último valor para la próxima vez que sea llamada, es decir, sin inicializar la variable cada vez. Por supuesto que las variables estáticas solo conservan su valor actualizado durante la lectura de la página. Si salimos de la página y volvemos a entrar, partimos del valor inicial.