1. Statische Variablen sind Variablen, die nur im Gültigkeitsbereich vorhanden sind. Nach Abschluss der Funktionsausführung geht der Wert dieser Variablen jedoch nicht verloren Wenn diese Funktion aufgerufen wird, behält die Variable ihren ursprünglichen Wert bei.
2. Es ist illegal, das berechnete Ergebnis eines Ausdrucks einer statischen Variablen zuzuweisen. Ein Ausdruck bezieht sich auf jede Anweisung, deren Wert sich ändert. Beispielsweise sind (1+1), $variable und anyfunc() Ausdrücke.
3. Sie denken vielleicht, dass die Definition statischer Variablen nicht sehr nützlich erscheint, da das gleiche Ergebnis leicht mit globalen Variablen erzielt werden kann. Auf globale Variablen kann jedoch von allen Funktionen zugegriffen werden. Wenn also zwei oder mehr Funktionen, die unabhängig sein sollen, Variablen mit demselben Namen verwenden, treten Konflikte auf, und im Vergleich zur Einführung globaler Variablen sind für die Verwendung statischer Variablen nicht mehr Lots erforderlich der Syntax. Wenn also nur eine Funktion auf eine bestimmte Variable zugreifen muss, sollten wir lieber statische Variablen anstelle globaler Variablen verwenden.
4 In Klassen wird das Schlüsselwort static zum Definieren statischer Elemente und zum anderen zur Definition verwendet Definieren Sie statische Methoden.
5. Ein statisches Mitglied ist eine Klassenvariable, die als zur gesamten Klasse und nicht zu einer Instanz der Klasse gehörend betrachtet werden kann. Im Gegensatz zu allgemeinen Instanzvariablen behalten statische Mitglieder nur einen Variablenwert bei, und dieser Variablenwert ist für alle Instanzen gültig, dh alle Instanzen teilen sich dieses Mitglied.
6.$this stellt nur die Instanz der aktuellen Klasse dar, self:: stellt die Klasse selbst dar (fügen Sie danach $ hinzu)
7. Scope-Qualifizierungsoperator::
Mit dem Scope-Qualifizierungsoperator können wir verwenden Zwei systemdefinierte Bereiche: self und parent. Darüber hinaus bietet PHP5.3 auch einen statischen Bereich. self stellt den Umfang der aktuellen Klasse dar, stellt aber im Gegensatz zu $this keine bestimmte Instanz der Klasse dar. Dieser Operator kann nicht in Code außerhalb der Klasse verwendet werden und erkennt seine Position in der Vererbungsbaumhierarchie nicht. Das heißt, wenn der Self-Bereich in einer erweiterten Klasse verwendet wird, kann Self die in der Basisklasse deklarierten Methoden aufrufen, ruft jedoch immer Methoden auf, die in der erweiterten Klasse überschrieben wurden. (Entspricht der Methodenabdeckung in Java, verwenden Sie parent, um die Methode der übergeordneten Klasse explizit aufzurufen)
aaa::bbb();
?>
Die mit den beiden Methoden erzielten Ergebnisse sind die gleichen.
Ich verstehe nicht, warum die gewöhnliche Methode bbb kann auch direkt mit dem Klassennamen:: aufgerufen werden, was sich von dem in Java zu unterscheiden scheint
Java-Code
Test.java
class Test{
System.out.println("no-static!"
}
//Statische Methode
public static void show(){
System.out.println("static!" > }
//main method
public static void main(String args[]){
Test obj= new Test(
obj.eat(); //Ausgabe no-static!
obj.show();//Die Methode gehört zur Klasse, und auf Instanzen der Klasse kann natürlich zugegriffen werden , wird in Editoren wie Eclipse eine gelbe Eingabeaufforderung angezeigt, die darauf hinweist, dass Sie den Klassennamen zum direkten Aufruf verwenden
//(Auf die statische Methode show() vom Typ Test sollte statisch zugegriffen werden.)
Test.show();//Statische Ausgabe
//Test.eat();//Fehlermeldung, dass die nicht-statische Methode eat() dies nicht kann aus dem statischen Kontext referenziert werden, PHP kann dies jedoch tolerieren. . .
}
}
Persönliches Verständnis: Solange $this->xx nicht in der aufgerufenen gewöhnlichen Methode vorkommt ($this stellt nur eine Instanz der aktuellen Klasse dar), kann auch davon ausgegangen werden, dass die gewöhnliche Methode direkt zur Klasse gehört , sodass sie direkt mit dem Klassennamen aufgerufen werden kann, im Gegensatz zu Methoden in Java, die als statisch deklariert werden müssen, bevor sie direkt mit dem Klassennamen aufgerufen werden können (php6 hat mehrere Änderungen an der Funktionsweise statischer Methoden vorgenommen. Erstens, beim Zugriff auf nicht- statische Methoden, der Operator :: wird nicht mehr verwendet! Diese Art von Methode wird eliminiert.)
Helfen Sie der übergeordneten Klasse, die Methode der Unterklasse aufzurufen Durch den in PHP 5.3 vorgeschlagenen ::-Bereich müssen wir self:: und parent:: nicht mehr verwenden. Wenn Sie auf die endgültige Implementierungsklasse verweisen möchten, können Sie static:: verwenden. Dieses Qualifikationsmerkmal berechnet die Mitglieder der letzten Klasse in der Vererbungshierarchie unmittelbar vor der Ausführung des Codes. Dieser Vorgang wird als verzögerte Bindung bezeichnet. Ich sehe keinen Nutzen darin. Kann ich nicht einfach ein neues Objekt der endgültigen Implementierungsklasse direkt in der übergeordneten Klasse erstellen und es dann aufrufen? Wenn Sie jedoch nicht wissen, wie die endgültige Klasse heißt und welchen Effekt die überschriebene Methode erzielt, scheint dies nützlich zu sein. static::scope kann auch auf statische Methoden angewendet werden, sodass Unterklassenmethoden statisch von der übergeordneten Klasse aufgerufen werden können.