Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Unterschieds zwischen statischen statischen lokalen Variablen und statischen globalen Variablen

Detaillierte Erläuterung des Unterschieds zwischen statischen statischen lokalen Variablen und statischen globalen Variablen

伊谢尔伦
伊谢尔伦Original
2017-05-08 10:56:3915168Durchsuche

Lokale Variablen können hinsichtlich der Speichermethoden in dynamische Speichertypen und statische Speichertypen unterteilt werden. Lokale Variablen in einer Funktion weisen den Speicherplatz standardmäßig dynamisch zu, sofern sie nicht ausdrücklich als statische Speicherklasse deklariert sind. Die internen dynamischen Variablen werden nach dem Funktionsaufruf automatisch freigegeben. Wenn Sie möchten, dass die internen Variablen nach Ausführung der Funktion im Speicher verbleiben, sollten Sie statische Variablen verwenden. Nachdem die Funktion ausgeführt wurde, verschwinden die statischen Variablen nicht, sondern werden von allen Aufrufen der Funktion gemeinsam genutzt. Das heißt, wenn die Funktion erneut ausgeführt wird, werden die statischen Variablen weiterhin mit den vorherigen Ergebnissen ausgeführt Wird während der Ausführung des Skripts verwendet. Die Punktfunktion wird beim ersten Aufruf initialisiert. Um eine Funktionsvariable als statisch zu deklarieren, verwenden Sie das Schlüsselwort static.

Zuvor haben wir lokale Variablen im Bereich von PHP-Variablen und globale Variablen im Bereich von PHP-Variablen eingeführt. 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 den Wert nicht ändern können. Eine Größe, die den 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 und 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). sind sicher Die lokale Variable einer bestimmten Funktion, das heißt, die Variable kann nur innerhalb der Funktion verwendet werden, in der die Variable definiert ist. Der Unterschied zwischen den beiden besteht darin, dass die automatische Variable verwendet wird existieren und verschwinden, wenn die Funktion aufgerufen und beendet wird, während die statische Variable existiert und verschwindet, wenn die Funktion aufgerufen und beendet wird. Lokale Klassenvariablen werden immer existieren, unabhängig davon, ob die Funktion, in der sie sich befinden, aufgerufen wird. Obwohl die Variable weiterhin vorhanden ist, kann sie nicht verwendet werden. 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 von Anfangswerten zu automatischen Variablen erfolgt beim Aufruf der Funktion. Bei jedem Aufruf der Funktion wird der Anfangswert erneut zugewiesen, 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 statischen statischen lokalen Variablen und statischen globalen Variablen

Der Unterschied zwischen den beiden ist:

1. Der Geltungsbereich nicht statischer globaler Variablen ist das gesamte Quellprogramm. Wenn ein Quellprogramm aus mehreren Quelldateien besteht, sind nicht statische globale Variablen in jeder Quelldatei 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-Variable und Heap-Variable.

Der Beispielcode lautet wie folgt:

<?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
?>

Das Obige ist die detaillierte Erklärung statischer lokaler Variablen und statischer globaler Variablen.

【Empfohlene verwandte Tutorials】

1. "php.cn Dugu Jiujian (4) - PHP-Video-Tutorial

2 Eine vollständige Reihe von Video-Tutorials zur PHP-Programmierung vom Einstieg bis zur Beherrschung


3.

Praktische PHP-Video-Tutorials

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds zwischen statischen statischen lokalen Variablen und statischen globalen Variablen. 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