Verwenden Sie self:: oder __CLASS__, um einen statischen Verweis auf die aktuelle Klasse zu erstellen, abhängig von der Klasse, in der die aktuelle Methode definiert ist: Die Verwendung von static:: wird nicht mehr auf die Klasse analysiert, in der die aktuelle Methode definiert ist. sondern wird zur tatsächlichen Laufzeit berechnet. Es kann auch als „statische Bindung“ bezeichnet werden, da es für Aufrufe statischer Methoden verwendet werden kann (aber nicht darauf beschränkt ist).
Mir wurde kürzlich in den Kommentaren eines Videos eine kleine Frage gestellt: Gibt es besondere Überlegungen, wenn ich mich hier für die Verwendung von „Static“ anstelle von „Self“ entscheide? Oder wir können die Frage so ändern:
Was genau ist PHPs neues statisches und neues Selbst?
Tatsächlich sollte es sehr klar sein, wenn wir uns ein Beispiel ansehen:
class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
Beachten Sie, dass diese Zeile hier get_class(Son::getStatic());
die Klasse Son
zurückgibt, die wie folgt zusammengefasst werden kann:
neues Selbst
1 .self
gibt die Klasse zurück, in der sich das Schlüsselwort new self
in new
befindet. In diesem Beispiel beispielsweise:
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
gibt immer Father
zurück.
neue Statik
2.static
Basierend auf dem oben Gesagten ist es etwas intelligenter: static
gibt die Klasse zurück, die new static()
ausführt, z. B. Son
, die Was zurückgegeben wird, ist get_class(Son::getStatic())
, Son
führt Father
aus und was zurückgegeben wird, ist get_class(Father::getStatic())
Father
und new self
das gleiche Ergebnis zurückgeben. new static