Ich habe nach der Quelle für Drupal 7 gesucht und einige Dinge gefunden, die ich vorher noch nicht gesehen hatte. Ich habe einen ersten Blick in das PHP-Handbuch geworfen, aber es hat diese Beispiele nicht erklärt.
Was macht das Schlüsselwort static
mit einer Variablen innerhalb einer Funktion?
function module_load_all($bootstrap = FALSE) {
static $has_run = FALSE
Antworten:
Dadurch merkt sich die Funktion den Wert der angegebenen Variablen (
$has_run
in Ihrem Beispiel) zwischen mehreren Aufrufen.Sie können dies für verschiedene Zwecke verwenden, zum Beispiel:
In diesem Beispiel
if
würde das nur einmal ausgeführt. Auch wenn mehrere Anrufe andoStuff
auftreten würden.quelle
$cache
umnull
auf spätere Anrufe, nicht wahr?$cache
wird nur zwischen Anforderungen zurückgesetzt. Ja, es wird nicht bei späteren Aufrufen in derselben Anforderung (oder Ausführung des Skripts) zurückgesetzt.if
, dass die Bedingungsprüfung$cache === null
jedes Mal ausgeführt wird, wenn diese Funktion aufgerufen wird, und nicht, ob der Blockcode$cache = '..'
ausgeführt wird.Es scheint, als hätte bisher niemand erwähnt, dass statische Variablen in verschiedenen Instanzen derselben Klasse ihren Zustand behalten. Seien Sie also vorsichtig, wenn Sie OOP-Code schreiben.
Bedenken Sie:
Wenn Sie möchten, dass sich eine statische Variable ihren Status nur für die aktuelle Klasseninstanz merkt, sollten Sie sich an eine Klasseneigenschaft wie die folgende halten:
quelle
Anhand des folgenden Beispiels:
Erster Anruf von
wird ausgegeben
10
, dann$v
zu sein20
. Die Variable$v
wird nach Beendigung der Funktion nicht als Müll gesammelt, da es sich um eine statische (nicht dynamische) Variable handelt. Die Variable bleibt in ihrem Bereich, bis das Skript vollständig beendet ist.Daher der folgende Aufruf von
wird dann ausgegeben
20
und dann$v
auf sein gesetzt15
.quelle
Statisch funktioniert genauso wie in einer Klasse. Die Variable wird von allen Instanzen einer Funktion gemeinsam genutzt. In Ihrem Beispiel wird $ has_run nach dem Ausführen der Funktion auf TRUE gesetzt. Alle zukünftigen Läufe der Funktion haben $ has_run = TRUE. Dies ist besonders nützlich bei rekursiven Funktionen (als Alternative zum Übergeben der Zählung).
Siehe http://php.net/manual/en/language.variables.scope.php
quelle
Eine statische Variable in einer Funktion bedeutet, dass unabhängig davon, wie oft Sie die Funktion aufrufen, nur eine Variable vorhanden ist.
quelle
Um die Antwort von Yang zu erweitern
Wenn Sie eine Klasse mit statischen Variablen erweitern, enthalten die einzelnen erweiterten Klassen ihre "eigene" statische Referenz, die von Instanzen gemeinsam genutzt wird.
Ausgänge:
http://ideone.com/W4W5Qv
quelle
Innerhalb einer Funktion,
static
bedeutet dies, dass die Variable ihren Wert jedes Mal beibehält, wenn die Funktion während der Lebensdauer des Seitenladens aufgerufen wird.Wenn Sie in dem von Ihnen angegebenen Beispiel eine Funktion zweimal aufrufen, wenn sie auf gesetzt ist
$has_run
,true
kann die Funktion daher erkennen, dass sie zuvor aufgerufen wurde, da$has_run
sie immer nochtrue
dem Zeitpunkt entspricht, zu dem die Funktion zum zweiten Mal gestartet wird.Die Verwendung des
static
Schlüsselworts in diesem Zusammenhang wird im PHP-Handbuch hier erläutert: http://php.net/manual/en/language.variables.scope.phpquelle