Quelle est la différence entre new self et new static en PHP ? Liaison statique tardive
Bonjour à tous ! Je lutte depuis trois jours contre une bizarrerie en PHP. J'ai une classe de base qui crée ses instances via une méthode statique. Lorsque j'hérite de cette classe, je m'attends à ce que la classe fille crée des objets de son propre type, mais pour une raison quelconque, un objet de la classe parente est créé.
Voici un exemple simplifié :
```php
class ParentClass {
public static function create() {
return new self();
}
}
class ChildClass extends ParentClass {
// aucune redéfinition
}
$obj = ChildClass::create();
// $obj est un ParentClass, pas un ChildClass !
echo get_class($obj); // ParentClass
```
J'ai lu sur la liaison statique tardive (Late Static Binding) et sur le mot-clé `static`, mais je ne comprends pas complètement comment cela fonctionne. Pourquoi `new self()` fait-il toujours référence à la classe où ce code est écrit, et non à la classe à partir de laquelle la méthode a été appelée ? Et comment faire pour que `ChildClass::create()` retourne bien un objet de type `ChildClass`, et non `ParentClass` ?
Explique
No answers yet.
Connectez-vous pour laisser une réponse