|
Uma variável estática é
visível num escopo local, mas é
inicializada apenas uma vez e seu valor
não é perdido quando a execução
do script deixa esse escopo. Veja o seguinte
exemplo:
function Teste() {
$a = 0;
echo $a;
$a++;
}
O último comando da função
é inútil, pois assim que for
encerrada a execução da função
a variável $a perde o seu valor.
Já no exemplo seguinte, a cada chamada
da função a variável
$a terá o seu valor impresso e será
incrementado:
function Teste() {
static $a = 0;
echo $a;
$a++;
}
O modificador static é muito utilizado
em funções recursivas, já
que o valor de algumas variáveis
precisa ser mantido. Ele funciona da seguinte
forma: O valor das variáveis declaradas
como estáticas é mantido ao
terminar a execução da função.
Na próxima execução
da função, ao encontrar novamente
a declaração com static, o
valor da variável é recuperado.
Noutras palavras, uma variável declarada
como static tem o mesmo "tempo de vida"
que uma variável global, porém
a sua visibilidade é restrita ao
escopo local em que foi declarada e só
é recuperada após a declaração.
Exemplo:
function Teste() {
echo "$a";
static $a = 0;
$a++;
}
O exemplo acima não produzirá
saída alguma. Na primeira execução
da função, a impressão
ocorre antes da atribuição
de um valor à função,
e portanto o conteúdo de $a é
nulo (string vazia). Nas execuções
seguintes da função Teste()
a impressão ocorre antes da recuperação
do valor de $a, e portanto nesse momento
o seu valor ainda é nulo. Para que
a função retorne algum valor
o modificador static deve ser utilizado.
|