php statische Konstanteneigenschaft
Habe ich zwei code-Schnipsel (in Bezug auf die static
keyword), die ich von Ihnen erwarten, um den gleichen output, aber eigentlich sind die Ausgänge anders.
Die Frage ist, warum?
Snippet 1
class base
{
public static $var = 1;
}
class sub extends base
{
public static $var = 2;
}
echo base::$var; //Outputs 1
1
Snippet 2
class base2
{
public static $var2 = 1;
}
class sub2 extends base2
{
}
sub2::$var2 = 2;
echo base2::$var2; //Outputs 2
2
danke für den Tipp, soeben aktualisiert
Ich vermute, du verwechselst das Ergebnis mit
was sind Sie eigentlich versucht zu erreichen? Der Ausgang ist anders, weil Sie entfernt
Ich denke, dass Ihr auf der Suche nach: In der Klasse sub verwenden: self::$var = 2;
Ich vermute, du verwechselst das Ergebnis mit
const
. In php static
eine Eigenschaft definiert, die unabhängig von einer Instanz. Aber es kann sich noch ändern.was sind Sie eigentlich versucht zu erreichen? Der Ausgang ist anders, weil Sie entfernt
public static $var = 2;
. Aber Sie wissen, dass. Also, was ist die eigentliche Frage?Ich denke, dass Ihr auf der Suche nach: In der Klasse sub verwenden: self::$var = 2;
InformationsquelleAutor nut | 2013-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchte ich hinzufügen, ein weiterer Punkt.
STATISCHE variable sind nicht verbunden, um eine bestimmte Instanz/Objekt der Klasse. Daher ändern Sie die variable mit Übergeordneten Klasse verweisen oder Kind-Klasse Referenz, die gleiche Kopie wird modifiziert.
Daher neben Verständnis Public Static als Globale, Bitte verstehen Sie es als nicht verbunden an eine bestimmte Instanz, daher mit jeder Klasse Hierarchie Referenz, die Sie aktualisieren, eine statische variable , die gleiche Position im Speicher wird aktualisiert.
--
Vinod
Ja, Das ist wahr. Probieren Sie es aus.
Nein,es funktioniert nicht: class base { public static $var = 1; } class sub extends base { public static $var = 2; } sub::$var = 3; echo base::$var; echo sub::$var; bitte versuchen Sie, diese
Naja, ich war sagen w.r.t Ihre code2-Beispiel, das Sie geschrieben haben, als Teil deiner Frage. Wenn Sie nicht über eine variable definiert, die in der Kind-Klasse und verweisen die Eltern-Klasse die statische variable mit der Kind-Klasse Namen wie sub::$var, dann, wenn Sie ein update der Eltern kopieren. Wenn Sie dieselbe variable name definiert, die sowohl in jeder Klasse, dann aktualisieren Sie nur Ihre lokale Kopie. Mein Kommentar war w.r.t, um Ihre code2-Probe nur
die obigen Kommentare ist mir klar, danke zamil und Vinod
InformationsquelleAutor Vinod Jayachandran
Public static variable
wirkt wieglobal
variable.Den Umfang der
public static variable
liegt weltweit, können Sie sicherstellen, dass keine änderungen an denglobal variable
gesehen werden kann über das Programm.Dieses Konzept, können Sie analysieren in Ihrem Beispiel-Programm....Schauen Sie bitte in Statische variable Vererbung.
Sie sind herzlich willkommen....Aber ich würde nicht empfehlen die Verwendung von statischen Variablen...
Kommentar???
InformationsquelleAutor Akash KC
Seit sub2-Klasse nicht haben var2 es nimmt den Wert des base2-Klasse.Also, wenn u einen neuen Wert zugewiesen mit dieser
sub2::$var2 = 2;
es geändert, um neuen Wert.In der ersten code, den Sie überschrieben haben, die in Ihrer erweiterten Klasse.Beide Variablen haben Raum innerhalb Ihrer jeweiligen Klassen.
wir können auf jeden Fall überschreiben von statischen Methoden.Aber sicher nicht über statische Eigenschaften,aber wenn u erklären dieselbe variable als übergeordnete Klasse in einer erweiterten Klasse, die Sie nicht auf den gleichen Speicherbereich.
Vereinbart, Bitte Lesen Sie meine Kommentare zu deinem vorherigen Frage in meiner Antwort
InformationsquelleAutor zamil
Wenn Sie eine statische variable für eine Unterklasse, dann ist diese variable geteilt wird (es hat immer den gleichen Wert in beiden Klassen). Wenn Sie das überschreiben der statischen variable in einer Unterklasse, die dann seine neue statische variable, die unabhängig von der statischen variable aus der übergeordneten.
In Snippet 1
base::var
undsub::var
haben unterschiedliche Speicher-Zuweisungen, denn Sie definiert$var = 2;
in der Klassesub
.In Snippet 2
base::var
undsub::var
haben die gleiche Speicherzuordnung, weil Sie nicht angeben$var2
in der Klassesub2
.Thats, warum
base:var
ist nicht zu ändern. Es würde sich auch nicht ändern, wenn Sie ändern$var
aussub
Klasse später wie folgt:InformationsquelleAutor Adam