Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung statischer Variablen in PHP

Detaillierte Erklärung statischer Variablen in PHP

小云云
小云云Original
2018-03-16 13:52:361778Durchsuche

Statischer Variablentypspezifizierer ist statisch. Statische Variablen gehören zur statischen Speichermethode und ihr Speicherplatz ist der statische Datenbereich im Speicher (Speichereinheiten werden im statischen Speicherbereich zugewiesen. Die Daten in diesem Bereich belegen diese Speicherplätze immer während der gesamten Laufzeit). Programm (während der gesamten Laufzeit des Programms nicht freigegeben), kann auch davon ausgegangen werden, dass seine Speicheradresse bis zum Ende des gesamten Programms unverändert bleibt (im Gegenteil, solange). Automatische Variablen, dh dynamische lokale Variablen, gehören zur Kategorie des dynamischen Speichers, belegen dynamischen Speicherplatz und werden nach Abschluss des Funktionsaufrufs freigegeben. Obwohl statische Variablen während der gesamten Ausführung des Programms immer vorhanden sind, können sie nicht außerhalb seines Gültigkeitsbereichs verwendet werden.

Darüber hinaus sind Variablen, die zur statischen Speichermethode gehören, nicht unbedingt statische Variablen. Beispiel: Obwohl externe Variablen (in PHP als globale Variablen bezeichnet) statische Speichermethoden sind, müssen sie nicht unbedingt statische Variablen sein. Sie müssen durch statische Variablen definiert werden, bevor sie zu statischen externen Variablen oder statischen globalen Variablen werden können.

Alle globalen Variablen sind statische Variablen, und lokale Variablen sind nur dann lokale statische Variablen, wenn sie mit dem Typmodifikator static definiert sind.

Statische Variablen können überall angewendet werden. Sobald die Anwendung erfolgreich ist, werden keine anderen ähnlichen Anwendungen mehr akzeptiert.

Statische Variablen bedeuten nicht, dass sie ihren Wert nicht ändern können. Eine Größe, die ihren Wert nicht ändern kann, wird als Konstante bezeichnet. Der darin enthaltene Wert ist veränderbar und bleibt aktuell. Sie wird als statisch bezeichnet, da sie sich nicht ändert, wenn die Funktion aufgerufen oder beendet wird. Das heißt, wenn wir einer statischen Variablen beim letzten Aufruf der Funktion einen bestimmten Wert zuweisen, bleibt der Wert beim nächsten Aufruf der Funktion unverändert.

1. Statische lokale Variablen:

1. Interne Variablen vom statischen Typ sind die gleichen wie automatische Variablen (d. h. lokale Variablen ohne statische Deklaration). Das heißt, die Variable kann nur innerhalb der Funktion verwendet werden, in der sie definiert ist. Der Unterschied zwischen den beiden besteht darin, dass die automatische Variable existiert und verschwindet, wenn die Funktion aufgerufen wird wird beendet, die lokale Variable der statischen Klasse existiert jedoch nicht, unabhängig davon, ob die Funktion, in der sie sich befindet, aufgerufen wird. Wenn die Funktion, die sie definiert, erneut aufgerufen wird, kann sie weiterhin verwendet werden und der nach dem vorherigen Aufruf verbleibende Wert wird gespeichert. Mit anderen Worten, eine interne Variable vom statischen Typ ist eine Variable, die nur in einer bestimmten Funktion verwendet werden kann, aber immer Speicherplatz belegt.

2. Wenn eine statische Variable beim Definieren einer statischen Variablen im Funktionskörper initialisiert wird, führt das Programm in Zukunft keine Initialisierungsoperationen mehr durch (die statische Variableninitialisierungsanweisung des Basistyps, die innerhalb der Funktion erscheint). wird erst zum ersten Mal verwendet, wenn es aufgerufen wird). Die Zuweisung des Anfangswerts zur automatischen Variablen erfolgt beim Aufruf der Funktion. Bei jedem Aufruf der Funktion wird der Anfangswert erneut angegeben, was der Ausführung einer Zuweisungsanweisung entspricht.

3. Der Initialisierungsausdruck statischer lokaler Variablen muss eine Konstante oder ein konstanter Ausdruck sein. Selbst wenn eine lokale statische Variable ohne Anfangswert definiert ist, weist das System automatisch einen Anfangswert von 0 (für numerische Variablen) oder ein Nullzeichen (für Zeichenvariablen) zu. Wenn für die automatische Variable auto kein Anfangswert zugewiesen wird, ist ihr Wert ein unsicherer Wert.

4. Wenn eine Funktion mehrmals aufgerufen wird und die Werte bestimmter Variablen zwischen den Aufrufen beibehalten werden müssen, können statische lokale Variablen berücksichtigt werden. Obwohl globale Variablen auch zum Erreichen des oben genannten Zwecks verwendet werden können, verursachen globale Variablen manchmal unerwartete Nebenwirkungen (hauptsächlich verursacht durch den Umfang der Variablen). Daher ist es immer noch besser, lokale statische Variablen zu verwenden.

Hinweis: Lokale statische Variablen beanspruchen viel Zeit im Speicher und sind schlecht lesbar. Vermeiden Sie daher die Verwendung lokaler statischer Variablen, sofern dies nicht erforderlich ist.

2. Statische globale Variablen

Der Deklaration einer globalen Variablen (externe Variable) wird eine statische Variable vorangestellt, um eine statische globale Variable zu bilden.

Globale Variablen selbst sind statische Speichermethoden, und statische globale Variablen sind natürlich auch statische Speichermethoden.

Es gibt keinen Unterschied in den Speichermethoden zwischen den beiden.

Der Unterschied zwischen den beiden ist:

1. Der Umfang nicht statischer globaler Variablen ist das gesamte Quellprogramm. Wenn ein Quellprogramm aus mehreren Quelldateien besteht, ist der Umfang nicht statischer globaler Variablen. Statische globale Variablen Variablen sind in allen Quelldateien gültig.

2. Statische globale Variablen beschränken ihren Gültigkeitsbereich, das heißt, sie sind nur innerhalb der Quelldatei gültig, in der die Variable definiert ist, und können nicht in anderen Quelldateien desselben Quellprogramms verwendet werden.

Aus der obigen Analyse geht hervor————

Das Ändern einer lokalen Variablen in eine statische Variable ändert ihre Speichermethode, dh ihre Lebensdauer.
Das Ändern einer globalen Variablen in eine statische Variable ändert ihren Gültigkeitsbereich und schränkt ihren Verwendungsbereich ein. statische statische Variablen werden im globalen Speicherbereich des Programms abgelegt (d. h. im globalen Datenbereich des Programms und nicht auf dem Stapel zugewiesen, sodass kein Stapelüberlauf auftritt). , damit die ursprüngliche Zuordnung beim nächsten Aufruf beibehalten werden kann. Dies ist der Unterschied zwischen Stack-Variablen und Heap-Variablen.

3. Anwendung in PHP

<?php
//--------------如何理解static静态变量-----------
 
/** 普通局部变量 */
function local() {
    $loc = 0; //这样,如果直接不给初值0是错误的。
    ++$loc;
    echo $loc . &#39;<br>&#39;;
}
local(); //1
local(); //1
local(); //1
echo &#39;===================================<br/>&#39;;
 
/** static静态局部变量 */
function static_local() {
    static $local = 0 ; //此处可以不赋0值
    $local++;
    echo $local . &#39;<br>&#39;;
}
static_local(); //1
static_local(); //2
static_local(); //3
//echo $local; 注意虽然静态变量,但是它仍然是局部的,在外不能直接访问的。
echo &#39;=======================================<br>&#39;;
 
/** static静态全局变量(实际上:全局变量本身就是静态存储方式,所有的全局变量都是静态变量) */
function static_global() {
    global $glo; //此处,可以不赋值0,当然赋值0,后每次调用时其值都为0,每次调用函数得到的值都会是1,但是不能想当然的写上"static"加以修饰,那样是错误的.
    $glo++;
    echo $glo . &#39;<br>&#39;;
}
static_global(); //1
static_global(); //2
static_global(); //3
?>

Verwandte Empfehlungen:

php: Analyse des Unterschieds zwischen statischen Variablen und gewöhnlichen Variablen

Detaillierte Erklärung des Unterschieds zwischen statischen statischen lokalen Variablen und statischen globalen Variablen

Statische statische Variablen von PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung statischer Variablen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn