Heim >Backend-Entwicklung >PHP-Tutorial >PHP „self' vs. „static': Wann unterscheidet sich „new static()' von „new self()'?
Verstehen der Unterscheidung zwischen neuem Selbst und neuem Static
In PHP werden self und static häufig innerhalb von Klassenmethoden verwendet, um neue Objekte zu instanziieren. insbesondere im Zusammenhang mit der Erbschaft. Es gibt jedoch subtile Unterschiede zwischen diesen beiden Schlüsselwörtern.
new self vs. new static
Auswirkungen für PHP 5.2
Beim Konvertieren einer PHP 5.3-Bibliothek in PHP 5.2, das keine Unterstützung für späte statische Bindung hat, wird ersetzt new static($options) mit new self($options) führt möglicherweise nicht zu den beabsichtigten Ergebnissen. Dies liegt daran, dass self immer auf die Klasse verweist, in der new tatsächlich geschrieben wird, während static Flexibilität bei der Zielklassenauflösung bietet.
Beispiel:
Bedenken Sie den folgenden Code in PHP 5.2:
class A { public static function create() { return new self(); } } class B extends A {} $object = B::create(); // $object is of class A, not B
In PHP 5.3 hätte derselbe Code ein Objekt der Klasse B instanziiert, weil static in aufgelöst worden wäre aufrufende Klasse.
Aktuelle Empfehlungen
Da PHP 5.2 nicht mehr aktiv unterstützt wird, ist es nicht möglich, eine Problemumgehung für dieses Problem zu finden. Aus Kompatibilitätsgründen ist es ratsam, die späte statische Bindung ganz zu vermeiden.
Das obige ist der detaillierte Inhalt vonPHP „self' vs. „static': Wann unterscheidet sich „new static()' von „new self()'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!