Eu estava olhando a fonte do Drupal 7 e encontrei algumas coisas que não tinha visto antes. Eu fiz algumas pesquisas iniciais no manual do php, mas não explicou esses exemplos.
O que a palavra-chave static
faz com uma variável dentro de uma função?
function module_load_all($bootstrap = FALSE) {
static $has_run = FALSE
Respostas:
Faz com que a função lembre o valor da variável fornecida (
$has_run
no seu exemplo) entre várias chamadas.Você pode usar isso para diferentes fins, por exemplo:
Neste exemplo, o
if
seria executado apenas uma vez. Mesmo sedoStuff
ocorrerem várias chamadas para .fonte
$cache
paranull
em chamadas posteriores, certo?$cache
só será redefinido entre as solicitações. Portanto, sim, ele não será redefinido nas chamadas posteriores na mesma solicitação (ou execução do script).if
que a verificação de condição$cache === null
seria executada toda vez que essa função fosse chamada, mas não se o código do bloco$cache = '..'
fosse executado.Parece que ninguém mencionou até agora, que as variáveis estáticas dentro de diferentes instâncias da mesma classe permanecem seu estado. Portanto, tenha cuidado ao escrever o código OOP.
Considere isto:
Se você quiser que uma variável estática lembre seu estado apenas para a instância da classe atual, é melhor manter uma propriedade de classe, como esta:
fonte
Dado o seguinte exemplo:
Primeira chamada de
sairá
10
, então$v
será20
. A variável$v
não é coletada como lixo após o término da função, pois é uma variável estática (não dinâmica). A variável permanecerá dentro de seu escopo até que o script termine totalmente.Portanto, a seguinte chamada de
será então emitido
20
e definido$v
como15
.fonte
A estática funciona da mesma maneira que em uma classe. A variável é compartilhada por todas as instâncias de uma função. Em seu exemplo particular, uma vez que a função é executada, $ has_run é definido como TRUE. Todas as execuções futuras da função terão $ has_run = TRUE. Isso é particularmente útil em funções recursivas (como uma alternativa para passar a contagem).
Veja http://php.net/manual/en/language.variables.scope.php
fonte
variável estática em uma função significa que não importa quantas vezes você chame a função, há apenas 1 variável.
fonte
Para expandir a resposta de Yang
Se você estender uma classe com variáveis estáticas, as classes estendidas individuais manterão sua "própria" estática referenciada que é compartilhada entre as instâncias.
saídas:
http://ideone.com/W4W5Qv
fonte
Dentro de uma função,
static
significa que a variável manterá seu valor sempre que a função for chamada durante o carregamento da página.Portanto, no exemplo que você deu, se você chamar uma função duas vezes, se for definida
$has_run
comotrue
, a função poderá saber que foi chamada anteriormente porque$has_run
ainda seria igual atrue
quando a função iniciar pela segunda vez.O uso da
static
palavra - chave neste contexto é explicado no manual do PHP aqui: http://php.net/manual/en/language.variables.scope.phpfonte