Avatar ·

Qual é a diferença entre new self e new static em PHP? Ligação estática tardia

Olá a todos! Estou há três dias lutando com uma estranheza em PHP. Tenho uma classe base que cria suas próprias instâncias através de um método estático. Quando herdo essa classe, espero que a classe filha crie objetos do seu próprio tipo, mas por algum motivo é criado um objeto da classe pai. Aqui está um exemplo simplificado: ```php class ParentClass { public static function create() { return new self(); } } class ChildClass extends ParentClass { // nenhuma sobrescrita } $obj = ChildClass::create(); // $obj é ParentClass, não ChildClass! echo get_class($obj); // ParentClass ``` Li sobre Ligação Estática Tardia (Late Static Binding) e sobre a palavra-chave `static`, mas não entendo completamente como isso funciona. Por que `new self()` sempre se refere à classe onde este código foi escrito, e não à classe a partir da qual o método foi chamado? E como faço para que `ChildClass::create()` retorne exatamente um objeto `ChildClass`, e não `ParentClass`? Explique