如何在继承方法中引用子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();
}
假设如下:
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();
}