Schauen Sie sich dieses Beispiel an und beachten Sie die angezeigten Ausgaben.
%Vor%Mein Verständnis war, dass sich die Verwendung des statischen -Schlüsselworts auf die Kindklasse beziehen würde, aber anscheinend wird es magisch auf die Elternklasse angewendet, wenn sie in der Kindklasse fehlt. (Dies ist ein gefährliches Verhalten für PHP, mehr zu dem, was weiter unten erklärt wird.)
Ich habe folgende zwei Dinge im Sinn, warum ich das machen möchte:
Wenn wir jedoch eine Eigenschaft zur Laufzeit überschreiben möchten (über die init-Methode), wird sie für die Elternklasse überschrieben! Von diesem Punkt an ändern sich Kinderklassen, die früher initialisiert wurden (wie im Falle von Bruder), unerwartet auf dich.
Scheinbar ist dies ein Ergebnis von untergeordneten Klassen, die nicht ihre eigene Kopie der statischen Eigenschaft haben, wenn sie nicht explizit innerhalb der Kindklasse definiert sind - aber anstelle eines Fehlers wird das Verhalten von statisch um auf den Eltern zuzugreifen. Gibt es also eine Möglichkeit, dass die Elternklasse dynamisch eine Eigenschaft erstellen kann, die zu der Kindklasse gehört, ohne dass sie innerhalb der Kindklassendefinition erscheint? Auf diese Weise könnte die Kindklasse ihre eigene Kopie haben Die statische Eigenschaft und das Schlüsselwort "static" können ordnungsgemäß darauf verweisen und geschrieben werden, um die Standardwerte für die übergeordneten Eigenschaften zu berücksichtigen.
Oder gibt es eine andere Lösung, gut, schlecht oder hässlich?
Es bezieht sich auf die korrekte Klasse, es ist nur so, dass statische Eigenschaften in Unterklassen im selben Referenzsatz wie in der Oberklasse sind, es sei denn, die neu definierte oder anderweitig die Referenzmenge ist gebrochen.
Sie müssen also tun:
%Vor%oder:
%Vor%Tags und Links php oop php-5.3 late-static-binding