class Father {
public static function getSelf() {
return new self();
}
public static function getStatic() {
return new static();
}
}
class Son extends Father {}
echo get_class(Son::getSelf()); // Father
echo get_class(Son::getStatic()); // Son
echo get_class(Father::getSelf()); // Father
echo get_class(Father::getStatic()); // Father
self
返回的是 new self
中关键字 new
所在的类。static
则上面的基础上,更聪明一点点。static
会返回执行 new static()
的类。
这里重点关注第二个 echo get_class(Son::getStatic());
可以看到它输出的是 Son。在官方文档中,叫做 后期静态绑定 。