Je regardais la source de Drupal 7, et j'ai trouvé des choses que je n'avais jamais vues auparavant. J'ai fait quelques recherches initiales dans le manuel php, mais cela n'a pas expliqué ces exemples.
Que fait le mot static
- clé à une variable à l'intérieur d'une fonction?
function module_load_all($bootstrap = FALSE) {
static $has_run = FALSE
Réponses:
Cela permet à la fonction de mémoriser la valeur de la variable donnée (
$has_run
dans votre exemple) entre plusieurs appels.Vous pouvez l'utiliser à différentes fins, par exemple:
Dans cet exemple, le
if
ne serait exécuté qu'une seule fois. Même si plusieurs appelsdoStuff
se produisaient.la source
$cache
ànull
lors des appels ultérieurs, n'est-ce pas?$cache
ne sera réinitialisé qu'entre les demandes. Alors oui, il ne sera pas réinitialisé sur les derniers appels dans la même requête (ou exécution du script).if
vérification de condition$cache === null
serait exécutée chaque fois que cette fonction est appelée, je ne pensais pas que le code de bloc de if$cache = '..'
serait exécuté.Il semble que personne ne l'a mentionné jusqu'à présent, que les variables statiques à l'intérieur de différentes instances de la même classe restent leur état. Soyez donc prudent lorsque vous écrivez du code POO.
Considère ceci:
Si vous voulez qu'une variable statique se souvienne de son état uniquement pour l'instance de classe actuelle, vous feriez mieux de vous en tenir à une propriété de classe, comme ceci:
la source
Compte tenu de l'exemple suivant:
Premier appel de
sortira
10
, puis$v
sera20
. La variable$v
n'est pas récupérée après la fin de la fonction, car il s'agit d'une variable statique (non dynamique). La variable restera dans sa portée jusqu'à ce que le script se termine totalement.Par conséquent, l'appel suivant de
sera alors sortie
20
, puis défini$v
pour être15
.la source
Static fonctionne de la même manière que dans une classe. La variable est partagée entre toutes les instances d'une fonction. Dans votre exemple particulier, une fois la fonction exécutée, $ has_run prend la valeur TRUE. Toutes les futures exécutions de la fonction auront $ has_run = TRUE. Ceci est particulièrement utile dans les fonctions récursives (comme alternative au passage du nombre).
Voir http://php.net/manual/en/language.variables.scope.php
la source
variable statique dans une fonction signifie que peu importe le nombre de fois que vous appelez la fonction, il n'y a qu'une seule variable.
la source
Pour développer la réponse de Yang
Si vous étendez une classe avec des variables statiques, les classes étendues individuelles contiendront leur «propre» statique référencée qui est partagée entre les instances.
les sorties:
http://ideone.com/W4W5Qv
la source
À l'intérieur d'une fonction, cela
static
signifie que la variable conservera sa valeur chaque fois que la fonction est appelée pendant la durée de vie du chargement de la page.Par conséquent, dans l'exemple que vous avez donné, si vous appelez une fonction deux fois, si elle est définie
$has_run
surtrue
, alors la fonction pourra savoir qu'elle a été précédemment appelée car elle$has_run
serait toujours égale autrue
moment où la fonction démarre la deuxième fois.L'utilisation du
static
mot - clé dans ce contexte est expliquée dans le manuel PHP ici: http://php.net/manual/en/language.variables.scope.phpla source