Heim >Backend-Entwicklung >PHP-Tutorial >PHP „self' vs. „static': Wann unterscheidet sich „new static()' von „new self()'?

PHP „self' vs. „static': Wann unterscheidet sich „new static()' von „new self()'?

Susan Sarandon
Susan SarandonOriginal
2024-12-14 00:15:09527Durchsuche

PHP `self` vs. `static`: When Does `new static()` Differ from `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

  • self bezieht sich auf die Klasse, in der das neue Schlüsselwort definiert ist , unter Berücksichtigung des aktuellen Umfangs und der Vererbungshierarchie.
  • statisch, eingeführt in PHP 5.3, bezieht sich auf die Klasse, für die die Methode aufgerufen wurde, die new aufruft, unabhängig von der Vererbungshierarchie.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn