1. class Father {
    2. public static function getSelf() {
    3. return new self();
    4. }
    5. public static function getStatic() {
    6. return new static();
    7. }
    8. }
    9. class Son extends Father {}
    10. echo get_class(Son::getSelf()); // Father
    11. echo get_class(Son::getStatic()); // Son
    12. echo get_class(Father::getSelf()); // Father
    13. echo get_class(Father::getStatic()); // Father

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