Estaba mirando la fuente de Drupal 7 y encontré algunas cosas que no había visto antes. Hice una búsqueda inicial en el manual de php, pero no explicó estos ejemplos.
¿Qué le hace la palabra clave static
a una variable dentro de una función?
function module_load_all($bootstrap = FALSE) {
static $has_run = FALSE
Respuestas:
Hace que la función recuerde el valor de la variable dada (
$has_run
en su ejemplo) entre múltiples llamadas.Puede usar esto para diferentes propósitos, por ejemplo:
En este ejemplo,
if
solo se ejecutaría una vez. Incluso sidoStuff
ocurrieran varias llamadas a .fuente
$cache
anull
en llamadas posteriores, ¿verdad?$cache
solo se restablecerá entre solicitudes. Entonces, sí, no se restablecerá en llamadas posteriores en la misma solicitud (o ejecución del script).if
verificación de condición$cache === null
se ejecutará cada vez que se llame a esta función, aunque no si$cache = '..'
se ejecuta el código de bloque .Parece que nadie mencionó hasta ahora, que las variables estáticas dentro de diferentes instancias de la misma clase siguen siendo su estado. Así que tenga cuidado al escribir código OOP.
Considera esto:
Si desea que una variable estática recuerde su estado solo para la instancia de clase actual, será mejor que se ciña a una propiedad de clase, como esta:
fuente
Dado el siguiente ejemplo:
Primera llamada de
saldrá
10
, luego$v
será20
. La variable$v
no se recolecta como basura después de que finaliza la función, ya que es una variable estática (no dinámica). La variable permanecerá dentro de su alcance hasta que el script finalice por completo.Por tanto, la siguiente convocatoria de
luego saldrá
20
, y luego se configurará$v
como15
.fuente
Static funciona de la misma manera que en una clase. La variable se comparte en todas las instancias de una función. En su ejemplo particular, una vez que se ejecuta la función, $ has_run se establece en TRUE. Todas las ejecuciones futuras de la función tendrán $ has_run = TRUE. Esto es particularmente útil en funciones recursivas (como una alternativa a pasar la cuenta).
Ver http://php.net/manual/en/language.variables.scope.php
fuente
variable estática en una función significa que no importa cuántas veces llame a la función, solo hay 1 variable.
fuente
Para ampliar la respuesta de Yang
Si extiende una clase con variables estáticas, las clases extendidas individuales mantendrán su "propia" estática referenciada que se comparte entre instancias.
salidas:
http://ideone.com/W4W5Qv
fuente
Dentro de una función,
static
significa que la variable conservará su valor cada vez que se llame a la función durante la vida útil de la carga de la página.Por lo tanto, en el ejemplo que ha dado, si llama a una función dos veces, si se establece
$has_run
entrue
, entonces la función podría saber que se había llamado anteriormente porque$has_run
aún sería igual atrue
cuando la función se inicia por segunda vez.El uso de la
static
palabra clave en este contexto se explica en el manual de PHP aquí: http://php.net/manual/en/language.variables.scope.phpfuente