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

时间:2019-04-27 05:54:34

标签: php inheritance php-7

假设以下内容:

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(),实际上返回一个新的A-

由于B继承了该方法,如何获取它以返回新的B?

编辑:有人指责重复的问题,我的回答是:实际上并不是重复的,因为先前提到的问题是关于语言结构的变化,而不是关于继承如何工作的问题。他们非常亲密,答案相同,但问题却不同。这就像说2 * 2是2 + 2的重复;他们有相同的数字,并最终得到相同的结果,但是他们在问不同的问题。

1 个答案:

答案 0 :(得分:2)

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

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