it-swarm.com.de

Statische Variablen in PHP

Ich habe verschiedene Informationen zu statischen Variablen in PHP gefunden, aber nichts, was tatsächlich erklärt, was es ist und wie es wirklich funktioniert. 

Ich habe gelesen, dass bei Verwendung in einer Klasse eine statische Eigenschaft von keinem Objekt verwendet werden kann, das von dieser Klasse instanziiert wird, und dass eine statische Methode von einem Objekt verwendet werden kann, das von der Klasse instanziiert wird. 

Ich habe jedoch versucht zu recherchieren, was eine statische Variable in einer Funktion tut, die nicht in einer Klasse ist. Funktioniert eine statische Variable innerhalb einer Funktion in etwa wie eine Schließung in Javascript oder bin ich bei dieser Annahme völlig daneben?

24
mike

Ich habe gelesen, dass bei Verwendung innerhalb einer Klasse eine statische Eigenschaft von keinem Objekt verwendet werden kann, das von dieser Klasse instanziiert wird 

Es hängt davon ab, was du damit meinst. z.B:

class Foo {
    static $my_var = 'Foo';
}

$x = new Foo();

echo $x::$my_var;  // works fine
echo $x->my_var;   // doesn't work - Notice: Undefined property: Foo::$my_var

und dass eine statische Methode von einem Objekt verwendet werden kann, das von der Klasse instanziiert wird? 

Ja, ein instantiiertes Objekt der Klasse kann auf eine statische Methode zugreifen.

Das Schlüsselwort static verhält sich in Klassen wie statische Klassenvariablen in anderen Sprachen. Ein Member (Methode oder Variable), das static deklariert wurde, ist der Klasse und nicht einer Instanz dieser Klasse zugeordnet. Sie können also ohne Instanz der Klasse darauf zugreifen (z. B .: Im obigen Beispiel könnte ich Foo::$my_var verwenden)


Ich habe jedoch versucht zu recherchieren, was eine statische Variable in einer Funktion tut, die nicht in einer Klasse ist. 

Funktioniert eine statische Variable innerhalb einer Funktion auch so etwas wie eine Schließung in Javascript oder bin ich in dieser Annahme völlig daneben.

Außerhalb von Klassen (z. B. in Funktionen) ist eine Variable static eine Variable, die ihren Wert nicht verliert, wenn die Funktion beendet wird. In gewissem Sinne funktionieren sie also in JavaScript wie Verschlüsse. 

Im Gegensatz zu JS-Schließungen gibt es jedoch nur einen Wert für die Variable, der bei verschiedenen Aufrufen derselben Funktion beibehalten wird. Aus dem Beispiel des PHP Handbuchs:

function test()
{
    static $a = 0;
    echo $a;
    $a++;
}

test();  // prints 0
test();  // prints 1
test();  // prints 2

Referenz: static Schlüsselwort (in Klassen) , (in Funktionen)

32

static hat zwei Einsatzmöglichkeiten in PHP:

Erstens und am häufigsten kann es verwendet werden, um 'KlassenvariablenFunktionen (im Gegensatz zu Instanzvariablen/-Funktionen) zu definieren, auf die zugegriffen werden kann, ohne eine Klasse zu instanziieren:

class A {
  public static $var = 'val'; // $var is static (in class context)
  public $other_var = 'other_val'; // non-static
}

echo A::$var; // val
echo A::$other_var // doesn't work (fatal error, undefined static variable)

$a = new A;
echo $a->var // won't work (strict standards)
echo $a->other_var // other_val

Zweitens kann es verwendet werden, um den Status zwischen Funktionsaufrufen aufrechtzuerhalten:

function a() {
  static $i = 0;
  $j = 0;
  return array($i++, $j++);
}
print_r(a()); // array(0, 0)
print_r(a()); // array(1, 0)
print_r(a()); // array(2, 0)
//...

Beachten Sie, dass das Deklarieren einer statischen Variablen innerhalb einer Funktion gleich funktioniert, unabhängig davon, ob die Funktion in einer Klasse definiert ist oder nicht. Alles, was zählt, ist die Deklaration der/- Variable (Klassenmitglied oder in einer Funktion).

22
connec

Eine statische Variable in einer Funktion wird nur beim ersten Aufruf dieser Funktion in ihrem laufenden Skript initialisiert.

6
young

Zuerst werde ich erklären, was passiert, wenn keine statische Variable verwendet wird

<?php
function somename() {
    $var = 1;
    echo $var . "<br />";
    $var++;
}
somename();
somename();
somename();
?>

Wenn Sie den obigen Code ausführen, wird die Ausgabe 1 1 1 sein. Seitdem Sie diese Funktion aufrufen, wird die Funktionsvariable 1 zugewiesen und dann gedruckt.


Nun wollen wir sehen, ob static variable verwendet wird

<?php
function somename() {
    static $var = 1;
    echo $var . "<br />";
    $var++;
}
somename();
somename();
somename();
?>

Wenn Sie dieses Code-Snippet ausführen, wird die Ausgabe 1 2 3 sein.

Hinweis: Static behält ihren Wert bei und bleibt bei jedem Aufruf der Funktion erhalten. Es wird seinen Wert nicht verlieren, wenn die Funktion aufgerufen wird.

0
Gnanasekar S
class Student {
static $total_student = 0;
static  function add_student(){
    return Student::$total_student++;
}
}

Erstens: Für die Funktion add_student ist es am besten, statisch nicht öffentlich ..__ zu verwenden. Zweitens: In der Funktion add_student verwenden wir Student :: $ total_student, nicht $ this-> total_student. Dies unterscheidet sich stark von normalen Variablen. Drittens: Statische Variablen werden im gesamten Vererbungsbaum gemeinsam genutzt.

nehmen Sie den folgenden Code, um zu sehen, was das Ergebnis ist:

class One {
static $foo ;
}
class Two extends One{}
class Three extends One{}
One::$foo = 1;
Two::$foo = 2;
Three::$foo = 3;
echo One::$foo;
echo Two::$foo;
echo Three::$foo;`
0
li bing zhao