假设以下内容:
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的重复;他们有相同的数字,并最终得到相同的结果,但是他们在问不同的问题。
答案 0 :(得分:2)
将new self()
替换为new static()
(后期绑定):
public static function new()
{
return new static();
}