Avatar ·

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