Was ist der Unterschied zwischen new self und new static in PHP? Späte statische Bindung
Hallo zusammen! Ich kämpfe seit drei Tagen mit einer Eigenart in PHP. Ich habe eine Basisklasse, die ihre Instanzen über eine statische Methode erstellt. Wenn ich diese Klasse vererbe, erwarte ich, dass die Kindklasse Objekte ihres eigenen Typs erstellt, aber stattdessen wird ein Objekt der Elternklasse erstellt.
Hier ist ein vereinfachtes Beispiel:
```php
class ParentClass {
public static function create() {
return new self();
}
}
class ChildClass extends ParentClass {
// keine Überschreibung
}
$obj = ChildClass::create();
// $obj ist ParentClass, nicht ChildClass!
echo get_class($obj); // ParentClass
```
Ich habe über Late Static Binding und das Schlüsselwort `static` gelesen, verstehe aber nicht vollständig, wie es funktioniert. Warum bezieht sich `new self()` immer auf die Klasse, in der dieser Code geschrieben wurde, und nicht auf die Klasse, von der die Methode aufgerufen wurde? Und wie kann ich erreichen, dass `ChildClass::create()` tatsächlich ein Objekt von `ChildClass` zurückgibt, nicht von `ParentClass`?
Erklär