【发布时间】:2017-09-08 13:12:39
【问题描述】:
考虑这段代码:
class ParentClass {
/** @return ParentClass */
public function getNew(){
return call_user_func(array($this,'generator'));
}
protected function generator(){
return new static(); // will actually return whatever class calls this code
}
}
class ChildClass extends ParentClass {}
$child = new ChildClass();
var_dump($child->getnew()); // object(ChildClass)
因为ParentClass::generator()返回一个static(),所以当子实例调用getNew()时,返回一个ChildClass()。 IDE(在我的例子中是 PhpStorm)无法解决这个问题,因为生成器是使用call_user_func() 动态调用的。结果,IDE 认为将返回一个ParentClass 实例:
有没有办法改进父级的 phpDoc 块以更好地反映返回类型?
【问题讨论】: