如何在继承方法中引用子class?

How to reference child class in inherited method?

假设如下:

class A
{
    public static function new() 
    {
       return new self();
     }
}

class B extends A
{

}


class C 
{
  public function main() 
 {
   $b = B::new(); // it actually returns a new A -- how to get it to return a new B since B inherited that method?
 }

}

调用B::new(),实际上return是一个新的A --

由于 B 继承了该方法,如何将其传送到 return 新 B?

编辑:有人指责重复的问题和我的回答:它不是真正的重复,因为之前提到的问题是关于语言结构的变化,而不是这个关于继承如何工作的问题。他们非常接近并且有相同的答案,但他们不是同一个问题。这就像说 2 * 2 是 2 + 2 的重复;他们有相同的数字并得到相同的结果,但他们问的是不同的问题。

new self()替换为new static()(后期绑定):

public static function new() 
{
    return new static();
}