Das Schlüsselwort static beschreibt, dass Mitgliedseigenschaften und Mitgliedsmethoden in der Klasse statisch sind. Welche Vorteile haben statische Mitglieder? Zuvor haben wir den Menschen als „Person“ deklariert. Wenn wir der Klasse „Person“ ein Attribut „des Landes, zu dem die Person gehört“ hinzufügen, können mit der Klasse „Jedes Objekt“ Hunderte oder mehr Instanzobjekte instanziiert werden das Attribut „Land, zu dem es gehört“. Wenn das Projekt für Chinesen entwickelt wird, hat jedes Objekt das Attribut „China“ und andere Attribute sind unterschiedlich. Wenn wir das Attribut „Land“ zu einem statischen Mitglied machen Damit nur ein Länderattribut im Speicher vorhanden ist und Hunderte oder mehr Objekte dieses Attribut gemeinsam nutzen, können statische Mitglieder den externen Zugriff einschränken, da statische Mitglieder zur Klasse gehören und keiner Objektinstanz angehören Wenn die Klasse zum ersten Mal geladen wird, sind sie für andere Klassen nicht zugänglich und können nur bis zu einem gewissen Grad auf dieses Mitglied der Klasse zugreifen Aus der Perspektive des Speichers wird der Speicher in vier Segmente unterteilt. Das Objekt wird im „Stapelspeicher“ abgelegt, und die statischen Elemente werden im „Stapelspeicher“ abgelegt. initialisierter statischer Abschnitt“, der beim ersten Laden der Klasse platziert wird, sodass er von jedem Objekt im Heap-Speicher gemeinsam genutzt werden kann, wie unten gezeigt:
Statische Variablen einer Klasse sind globalen Variablen sehr ähnlich und können von allen Instanzen der Klasse gemeinsam genutzt werden. Dasselbe gilt für statische Methoden der Klasse, die globalen Funktionen ähneln.
05 | public static $myCountry = "中国" ; |
10 | public static function say() { |
16 | echo Person:: $myCountry ; |
22 | Person:: $myCountry = "美国" ; |
23 | echo Person:: $myCountry ; |
Da statische Mitglieder erstellt werden, wenn die Klasse zum ersten Mal geladen wird, ist kein Objekt außerhalb der Klasse erforderlich und Sie können über den oben genannten Klassennamen auf die statischen Mitglieder zugreifen. Statische Mitglieder werden von jedem Instanzobjekt dieser Klasse gemeinsam genutzt. . Können wir also mithilfe von Objekten auf statische Mitglieder in einer Klasse zugreifen? Aus dem Bild oben können wir ersehen, dass nicht in jedem Objekt statische Mitglieder vorhanden sind, aber jedes Objekt gemeinsam genutzt werden kann. Wenn wir also ein Objekt verwenden, um auf Mitglieder zuzugreifen, gibt es keine solche Attributdefinition Verwenden Sie ein Objekt das kann nicht auf statische Mitglieder zugreifen, wie z. B. Java, Sie können Objekte verwenden, um auf statische Mitglieder in PHP zuzugreifen, wir sollten versuchen, sie nicht zu verwenden Bei den statischen Mitgliedern besteht unser Zweck bei der Arbeit am Projekt darin, über den Klassennamen auf sie zuzugreifen.
Statische Methoden in einer Klasse können nur auf die statischen Eigenschaften der Klasse zugreifen Der Grund dafür ist sehr einfach Um in der Methode dieser Klasse auf andere Mitglieder dieser Klasse zuzugreifen, müssen wir die Referenz $this verwenden, und der Referenzzeiger $this stellt das Objekt dar, das diese Methode aufruft. Wir sagten: Statische Methoden werden nicht mit Objekten aufgerufen , und Der Klassenname wird für den Zugriff auf verwendet, daher gibt es überhaupt kein Objekt und es gibt keinen Verweis auf $this. Ohne den Verweis auf $this kann nicht auf nicht-statische Mitglieder in der Klasse zugegriffen werden, und weil Für die statischen Mitglieder der Klasse sind keine Objekte erforderlich
Um darauf zuzugreifen, können die statischen Methoden in der Klasse nur auf die statischen Eigenschaften der Klasse zugreifen. Da $this nicht existiert, verwenden wir eine spezielle Klasse „self, um auf andere statische Mitglieder in der statischen Methode zuzugreifen. "; self ähnelt $this, außer dass self die Klasse darstellt, in der sich diese statische Methode befindet. In einer statischen Methode können Sie also den „Klassennamen“ der Klasse verwenden, in der sich die Methode befindet, oder Sie können „self“ verwenden, um auf andere statische Mitglieder zuzugreifen, wenn keine besonderen Umstände vorliegen Verwenden Sie normalerweise die letztere Methode, also die Methode „self::member attribute“.
05 | public static $myCountry = "中国" ; |
07 | //这是人的静态成员方法, 通过self访问其它静态成员 |
08 | public static function say() { |
09 | echo "我是" . self:: $myCountry ; |
Kann auf statische Mitglieder in nicht statischen Methoden zugegriffen werden? Natürlich ist dies möglich, aber Sie können nicht die Referenz „$this“ verwenden. Sie müssen auch den Klassennamen oder das Attribut „self:: member“ verwenden.
const ist ein Schlüsselwort zum Definieren von Konstanten in PHP, Sie verwenden die Funktion „define()“, aber um Konstanten in einer Klasse zu definieren, verwenden Sie das Schlüsselwort „const“, ähnlich wie C If Wenn #define seinen Wert ändert, tritt ein Fehler auf. Die Zugriffsmethode für mit „const“ geänderte Mitgliederattribute ähnelt der Zugriffsmethode für mit „static“ geänderte Mitglieder das Schlüsselwort „self“ in der Methode. Sie müssen jedoch nicht das Symbol „$“ verwenden und können nicht über Objekte darauf zugreifen.
05 | const constant = 'constant value' ; |
07 | function showConstant() { |
08 | echo self::constant . " " ;
// 使用self访问,不要加“$” |
12 | echo MyClass::constant .
" " ; //使用类名来访问,也不加“$” |
15 | $class ->showConstant(); |
16 |
// echo $class::constant; 是不允许的 |
Das Obige stellt Static und Const in PHP vor, einschließlich verwandter Inhalte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.